Visual Studio 2015 C++;-外部头文件

Visual Studio 2015 C++;-外部头文件,c,visual-studio-2015,C,Visual Studio 2015,我正在尝试将头文件从一个项目导入另一个项目中的.c文件。其思想是拥有一个包含头和函数的通用项目,可供同一解决方案中的多个项目使用 它们是各自项目中的头文件及其.c文件: Util_library.h: #pragma once #include <string.h> void reverse(char *c); #pragma一次 #包括 无效反向(字符*c); c.图书馆: #include "Util_Library.h" void reverse(char *c) {

我正在尝试将头文件从一个项目导入另一个项目中的.c文件。其思想是拥有一个包含头和函数的通用项目,可供同一解决方案中的多个项目使用

它们是各自项目中的头文件及其.c文件:

Util_library.h:

#pragma once
#include <string.h>

void reverse(char *c);
#pragma一次
#包括
无效反向(字符*c);
c.图书馆:

#include "Util_Library.h"

void reverse(char *c) {   //reverse function to be called by main functions
    size_t len = strlen(c) - 1, i, k = len - 1; //purpose of function is to
    char tmp;                                   //reverse a given string
    for (i = 0; i < len / 2; i++) {
        tmp = c[k];
        c[k] = c[i];
        c[i] = tmp;
        k--;
    }
}
#包括“Util_Library.h”
void reverse(char*c){//由主函数调用的反向函数
size\u t len=strlen(c)-1,i,k=len-1;//函数的目的是
char tmp;//反转给定字符串
对于(i=0;i
这是主函数(在另一个单独的项目中[但在同一个解决方案中]),通过包含头文件Util\u Library.h,它可以使用函数reverse():

#包括
#include//malloc库
#包括“C:\Users\…\Library\Util\u Library.h”//not real path
void main(){
char-ch[100];
printf(“输入字符串:”);
fgets(ch,sizeof(ch),stdin);
printf(“%s”,ch);
反向(ch);
printf(“%s”,ch);
int chk=getchar();
} 
尽管我没有语法错误(根据编译器的说法),但当我尝试运行程序时,我会遇到以下两个错误:

错误LNK2019未解析的外部符号“void u cdecl reverse(char*)”(?reverse@@YAXPEAD@Z)在函数主分配1D C:\Users…\Assignment\u 1D\Assignment\u 1D.obj 1中引用

错误LNK1120 1未解析的外部分配1D C:\Users\mmusc\Dropbox\Development\C(++)-Visual Studio\Assignments\x64\Debug\Assignment 1D.exe 1

谢谢你的帮助


编辑我已包含包含函数reverse()的实际.c文件,但是,是否可以只导入一个头文件而不是整个.c文件,该文件甚至可能包含您在特定的主函数“编辑”中不需要的函数?这不仅仅是包含头文件的问题:您还必须在项目中包含.c文件

您收到链接器错误,因为在将每个调用与函数本身链接时,函数不在那里,因为您尚未编译相应的.c文件

转到项目选项并将该.c文件包含在项目中。重新编译,程序就可以运行了

希望这有帮助


顺便说一句,这不是特定于Visual Studio的,它将发生在您应用此策略的任何IDE中。

包括头使
反向的声明可用,而不是实现

遗憾的是,C++的构建模型是相当古老的,

可以将.c文件添加到项目中


或者,您可以将
reverse
.c/.h文件(与其他文件一起)编译到静态库中,并将静态库添加到主项目中。不幸的是,库之间的一些编译选项必须匹配(例如它如何链接到C++运行时)。此外,您可能希望构建单独的调试库和发布库。更不幸的是,这些库在编译器之间不可移植,甚至在同一编译器的不同版本之间也不可移植

感谢的可能副本,工作起来很有魅力。但是,我想知道是否可以只包含头文件,因为.c文件可能包含我不需要的函数,这不需要在我的代码中导入?是的,您可以将实用程序函数构建到库中,并在主项目的设置中包含库路径和库名称。您还应该在主项目的设置中设置库头文件的包含路径,这样您就不必在main.c文件中使用头文件的完整路径名。请记住,如果创建库,该库将特定于您的操作系统和编译器。然而,这应该是理想的选择。
#include <stdio.h>
#include <stdlib.h> //malloc library
#include "C:\Users\...\Library\Util_Library.h" //not real path

    void main() {
    char ch[100];
    printf("Enter a string of characters:");
    fgets(ch, sizeof(ch), stdin);
    printf("%s", ch);
    reverse(ch);
    printf("%s", ch);
    int chk = getchar();
}