gpt4 book ai didi

c++ - 包含来自另一个目录的 header 时出现 Visual Studio 链接错误

转载 作者:太空狗 更新时间:2023-10-29 20:16:15 26 4
gpt4 key购买 nike

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

具体细节如下:

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

当我这样做时,智能感知在编辑 main.cpp 时工作正常。当我构建项目时,它可以正常编译,但出现链接错误,例如:

error LNK2019: unresolved external symbol "public: int __thiscall Test::add(int)" (?add@Test@@QAEHH@Z) referenced in function _main.

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

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

这是三个文件:

  1. C:\Test\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:\Test\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 中拥有依赖项目。这样它将正确地拉出正确的调试/发布/等。构建主项目时的 lib 版本。它还将从正确的文件夹中获取它。例如。无需手动修改链接器设置。

关于c++ - 包含来自另一个目录的 header 时出现 Visual Studio 链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10128337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com