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

时间:2012-04-12 17:04:42

标签: c++ visual-studio linker

简短的问题是:如何使用Visual Studio创建/编译/运行在不同目录中包含源代码的项目。

以下是具体细节:

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

当我这样做时,intellisense在编辑main.cpp时工作正常。当我构建项目时,它编译得很好,但我得到链接错误,如:

  

错误LNK2019:未解析的外部符号“public:int __thiscall Test :: add(int)”(?add @ Test @@ 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;
    }
    

2 个答案:

答案 0 :(得分:6)

最重要的是你必须编译Test.cpp并以某种方式与它链接。两个选项:

  1. 将Test.cpp添加到您的项目
  2. 创建一个库项目,比如TestLib。将Test.cpp添加到该项目并进行编译。然后将您的主项目与TestLib链接。
  3. 在第二种情况下,您可以在VisualStudio中拥有依赖项目。这样它将正确地拉出适当的Debug / Release /等。构建主项目时的lib版本。它也会从正确的文件夹中获取它。例如。无需手动处理链接器设置。

答案 1 :(得分:0)

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

您还需要指定其他包含目录,但听起来您已经对其进行了排序。