Visual Studio 2015 C++;-外部头文件
我正在尝试将头文件从一个项目导入另一个项目中的.c文件。其思想是拥有一个包含头和函数的通用项目,可供同一解决方案中的多个项目使用 它们是各自项目中的头文件及其.c文件: Util_library.h: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) {
#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();
}