包含来自其他目录的标题时的Visual Studio链接错误

问题描述:

简短的问题是:如何使用Visual Studio创建/编译/运行在不同目录中具有源代码的项目。包含来自其他目录的标题时的Visual Studio链接错误

下面是具体的细节:

我有一个目录中的类定义文件(.HPP)和实现文件(的.cpp),我有别的目录下的main.cpp文件。在Visual Studio 2008中,我创建了一个新项目并将main.cpp放入该项目中。我将类文件目录添加到其他包含目录(右键单击项目 - >项目属性 - >配置属性 - C/C++ - 常规 - >其他包含目录= C:\ Test \ cpp)。

当我这样做时,intellisense在编辑main.cpp时工作正常。当我生成项目,它编译罚款,但我得到的链接错误,如:

错误LNK2019:无法解析的外部符号“公用:整数__thiscall测试::添加(INT)”(添加测试@ @@? QAEHH @ Z)在函数_main中引用。

据我所知,Visual Studio实际上并没有编译Test.cpp(我没有看到它的任何.obj文件)。在编译/构建main.cpp之前,我已经尝试编译它,但这并没有什么区别。有没有解决的办法?当我在网上搜索答案时,我发现很多人忘记为链接器添加库,但我没有处理任何库。

我也通过将Test.hpp和Test.cpp移动到与main.cpp相同的目录来验证此代码编译和运行正常 - 工作没有任何问题。我只会坚持使用该设置,但我需要能够使用来自不同目录的源代码来处理我正在处理的项目。

这里有3个文件:

  1. C:\测试\ CPP \ Test.hpp

    #ifndef TEST_H 
    #define TEST_H 
    
    class Test 
    { 
    private: 
        int mynum; 
    
    public: 
        Test(); 
        int add(int num); 
    
    }; 
    #endif //TEST_H 
    
  2. C:\测试\ CPP \ Test.cpp的

    #include "Test.hpp" 
    
    Test::Test() 
    { 
        mynum = 0; 
    } 
    
    int Test::add(int num) 
    { 
        return mynum += num; 
    } 
    
  3. C:\ Visual Studio Projects \ MyProject \ main.cpp

    #include <iostream> 
    #include <Test\Test\Test.hpp> 
    
    int main(int argc, char *argv[]) 
    { 
        Test test; 
        std::cout << "Add 5 = " << test.add(5) << std::endl; 
        return 0; 
    } 
    

底线是你必须编译Test.cpp并以某种方式链接它。有两个选项:

  1. 添加Test.cpp的到您的项目
  2. 创建库项目,说TESTLIB。将Test.cpp添加到该项目并编译它。然后将您的主项目与TestLib链接起来。

在第二种情况下,您可以在VisualStudio中拥有相关项目。这样它将正确地调用正确的Debug/Release /等。当你建立你的主要项目的时候,lib的版本。它也会从正确的文件夹中得到它。例如。无需手动混淆链接器设置。

添加Test.hTest.cpp到项目(你应该能够刚刚从资源管理器中拖动文件)。

您还需要指定额外的包含目录,但听起来好像您已经完成了排序。

+0

正如我所说 - 我可以添加Test.hpp和Test.cpp到这个简单的项目,但我有其他不那么简单的项目需要单独的目录。例如,我将在本地机器上创建使用存储在服务器/*源代码控制存储库中的代码的项目。 – 2012-04-12 17:10:26

+0

你也说'我不处理任何图书馆'。如果您想跨多个项目重新使用代码,请按照dpiskyulev的建议将通用代码编译为.dll或库。 – 2012-04-12 18:30:04

+0

没有什么可以阻止你从多个目录导入到单个项目,如果这就是你的意思'我会坚持使用该设置,但我需要能够使用不同目录中的源代码来处理我正在处理的项目' 。当您在项目设置中输入目录时,只需在目录之间贴上';'。 – 2012-04-12 18:32:11