visual 2005中的错误Link2005 我在Visual C++中编写了一个C程序。

visual 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(无效)” (?

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(无效)” (?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只是为了完整性,因为这不是一个很好的实践,您很容易遇到链接问题。这正是您发布问题的最初错误类型。