为什么在将引用添加到测试项目后仍然出现“无法解析的外部符号”错误?

Ite*_*tor 3 c++ visual-studio visual-c++ visual-studio-2019

我在 Visual Studio 2019 中创建了一个 C++ 项目。我向其中添加了两个文件:MyClass.hppMyClass.cpp. 然后我创建了一个测试项目并添加了原始项目作为参考。

如果我双击测试项目中的引用,我可以看到MyClass. 但如果我尝试运行测试,我会收到此错误:

MyTest.obj : error LNK2019: unresolved external symbol "public: struct MyRef __thiscall MyClass::SetData(struct Data)" (?SetData@MyClass@@QAE?AUMyRef@@UData@@@Z) referenced in function "private: virtual void __thiscall MyTest_SetData_Test::TestBody(void)" (?TestBody@MyTest_SetData_Test@@EAEXXZ)
Run Code Online (Sandbox Code Playgroud)

我有什么错吗?为什么MyClass.cpp即使在引用的项目中也没有编译?我可以毫无错误地构建原始项目。当我尝试构建测试项目时,我只收到链接错误。


我遇到了有关未解决的外部符号错误的问题,但它没有解决我的问题。这是 Visual Studio 特定的问题。

如果我MyClass.cpp手动添加到测试项目中,那么它就可以工作。但我不想对每个文件都这样做,因为我的项目可能有更多的cpp源文件,而不仅仅是这个。我想使用“参考”功能使其工作。

当我创建测试项目时,我选择了原始项目作为参考。

bol*_*lov 5

将项目 B 添加到项目 A 作为引用基本上只是确保每当编译项目 A 时都会编译项目 B。

\n\n

您需要额外的设置:

\n\n
    \n
  1. 确保项目 B 构建为库(而不是可执行文件)
  2. \n
  3. 考虑从两个项目均可访问的两条路径。这将是项目 B 库的安装位置。这包括两件事:\n\n
      \n
    • 二进制文件(静态库是最简单的设置)
    • \n
    • 库头
    • \n
  4. \n
  5. 在编译项目 B 时,您需要将生成的二进制文件和标头安装到这些路径。为此,您可以执行构建后步骤来复制必要的文件: Properties \xc2\xbb Build Events \xc2\xbb Post-Build Event

    \n\n

    或者仅使用项目 B 的构建文件夹和源位置。

  6. \n
  7. 在项目A中:

    \n\n
      \n
    • 将标头路径添加到包含路径:
      \nProperties \xc2\xbb C/C++ \xc2\xbb General \xc2\xbb 其他包含目录
    • \n
    • 将库添加到要链接的库列表中:
      \n属性 \xc2\xbb 链接器 \xc2\xbb 输入 \xc2\xbb 其他依赖项
    • \n
    • 将二进制路径添加到链接器库搜索
      \n属性 \xc2\xbb 链接器 \xc2\xbb 常规 \xc2\xbb 其他库目录
    • \n
  8. \n
\n