visual 2005中的错误Link2005 我在Visual C++中编写了一个C程序。
test2.cppvisual 2005中的错误Link2005 我在Visual C++中编写了一个C程序。,c,include,pragma,C,Include,Pragma,test2.cpp #pragma startup pragmaEgFun1 void pragmaEgFun1(){ printf("Hello 1"); } test1.cpp #include "test2.cpp" int main{ printf("Hello 2"); } 该程序用于测试pragma预处理器指令。但是我得到了一个错误 错误LNK2005:“无效uu cdecl pragmaEgFun1(无效)” (?
#pragma startup pragmaEgFun1
void pragmaEgFun1(){
printf("Hello 1");
}
test1.cpp
#include "test2.cpp"
int main{
printf("Hello 2");
}
该程序用于测试pragma预处理器指令。但是我得到了一个错误
错误LNK2005:“无效uu cdecl pragmaEgFun1(无效)”
(?pragmaEgFun1@@YAXXZ)已在test1.obj中定义
有三种方法可以解决这个问题:
test1.cpp
中删除#include
行即可。因为您没有调用该函数,所以不需要包含它。pragma启动
应注意调用该函数,并且该函数将可用,因为VC将链接该函数test2.cpp
重命名为test2.h
,并将其包含在test1.cpp
中。但这不是最佳实践,因为函数通常不应该位于头文件中,即使编译器允许这样做test2.cpp
直接放入test1.cpp
,因为您实际上并不需要它回答您的意见-通常您将函数放入
.c/.cpp
文件中,并将声明、原型、定义、宏等放入.h
文件中。虽然这不是由编译器规定的,但良好的编码实践有助于避免您在问题中提出的此类问题。err。。。包括.cpp文件。请避免!您正在编译这两个.cpp
文件吗?由于将test2.cpp
包含到test1.cpp
中,因此必须确保Visual Studio 2005不会尝试将它们一起编译(即test2.cpp
标记为不在解决方案中编译)。如何确保VC++只编译test1.cpp,因为VisualC++有这个选项来构建项目并运行它。您的第二个解决方案,您能告诉我在哪里放置函数定义以及如何使用头文件在主函数中使用这些函数。我更新了答案。我提到解决方案2只是为了完整性,因为这不是一个很好的实践,您很容易遇到链接问题。这正是您发布问题的最初错误类型。