c++ - 为什么我在进行单元测试时 Visual Studio 会给出未解决的外部符号错误?
问题描述
所以我有一个使用 Visual Studio 开发的名为 OpenGLStuffs 的项目。我正在尝试为这个项目做测试。我创建了一个名为 AppTest 的单独测试项目。在这个测试项目中,我有一个名为 AppTest.cpp 的 cpp 文件,我将使用它来运行应用程序的测试版本。以下是测试文件的内容:
应用测试.cpp
#include "pch.h"
#include "CppUnitTest.h"
#include "../openGL/OpenGLStuffs/MainApp.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace AppTest
{
TEST_CLASS(AppTest)
{
public:
TEST_METHOD(TestMethod1)
{
runApp();
}
};
}
这是被测试的头文件的内容,它只有一行:
主应用程序.h
const int runApp();
我已经有一个定义runApp()
函数的 MainApp.cpp 文件。太长了,这里就不贴了。
问题是当我尝试重建 AppTest 项目时,Visual Studio 给了我这个错误:
Error LNK2019 unresolved external symbol "int const __cdecl runApp(void)" (?runApp@@YA?BHXZ)
referenced in function "public: void __thiscall AppTest::AppTest::TestMethod1(void)" (?
TestMethod1@AppTest@1@QAEXXZ) AppTest C:\my-space\my-stuffs\AppTest\AppTest.obj 1
我尝试向 AppTests 添加对 OpenGLStuffs 的引用,但它似乎不起作用。我还尝试将配置类型更改为 .lib 而不是 .dll 并且重建成功,但这会使测试资源管理器不显示任何测试。
有人可以告诉我我做错了什么吗?提前致谢!
解决方案
函数的主体是否在包含该标头的 .cpp 文件中?您也可以将主体包含在标头本身中,但是您必须声明它static
或inline
...否则该函数将被编译多次,从而导致链接错误。
推荐阅读
- python - Pip3 版本未在 WSL 中更新
- android - 将BottomNavigation视图粘贴到底部,无论是否在android studio中滚动
- sql - PostgreSQL 获取以前的事件
- keras - 带有度量的 load_model
- javascript - 等待浏览器在 React 中渲染元素
- javascript - 从 jquer 中继器中输入字段上的名称获取单击项目的索引
- flutter - Flutter - '属性'设置'不能无条件访问,因为接收器可以是'null''
- php - 如何在php中将数组对象转换为逗号分隔的对象
- reactjs - 在 react-three-fiber 中,是否可以在几何形状的每个面上放置文本?
- node.js - DynamoDB 和 NodeJS 本地表未显示在 DynamoDB 管理员中