c++ - 未解析的 Add_Test 符号,即使文件中包含测试夹具类
问题描述
突然之间,在我的测试工作了几个小时后,我收到了错误,它找不到我的文本固定功能(SetUp/TearDown)。我已经在一个单独的文件中定义了夹具,所以作为一个快速修复我将类移动到测试文件,但我仍然遇到同样的问题!
这是当前文件。为了简洁起见,我不仅省略了代码,我还尝试以这种形式构建它,以确保问题不是由测试中的代码引起的。我已经离开了include
。
#include "memory"
#include "../TestUtility/TestUtility.h"
#include "DependencyInjector.h"
#include "gtest/gtest.h"
#include "RecoverableErrorException.h"
namespace Test
{
class DependencyInjectorTest : public testing::Test
{
public:
DependencyInjectorTest();
virtual ~DependencyInjectorTest();
protected:
virtual void SetUp() { Framework::DependencyInjector::Destroy(); };
virtual void TearDown() override;
};
TEST_F ( DependencyInjectorTest, FindEmpty )
{
// content ommitted
}
TEST_F ( DependencyInjectorTest, Add )
{
// content ommitted
}
TEST_F ( DependencyInjectorTest, Find )
{
// content ommitted
}
} // namespace Test
以下是错误:
1>DependencyInjectorUnitTests.obj : error LNK2019: unresolved external symbol "public: __thiscall Test::DependencyInjectorTest::DependencyInjectorTest(void)" (??0DependencyInjectorTest@Test@@QAE@XZ) referenced in function "public: __thiscall Test::DependencyInjectorTest_Add_Test::DependencyInjectorTest_Add_Test(void)" (??0DependencyInjectorTest_Add_Test@Test@@QAE@XZ)
1>DependencyInjectorUnitTests.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall Test::DependencyInjectorTest::~DependencyInjectorTest(void)" (??1DependencyInjectorTest@Test@@UAE@XZ) referenced in function "public: virtual __thiscall Test::DependencyInjectorTest_Add_Test::~DependencyInjectorTest_Add_Test(void)" (??1DependencyInjectorTest_Add_Test@Test@@UAE@XZ)
1>DependencyInjectorUnitTests.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall Test::DependencyInjectorTest::TearDown(void)" (?TearDown@DependencyInjectorTest@Test@@MAEXXZ)
更新:错误在某个时候消失了。然后几个小时后,同样神秘而沮丧地回来了。即使是我没有处理过的文件,因为它很好。
解决方案
你需要定义构造函数、析构函数和TearDown
方法DependencyInjectorTest
。即使它们是虚拟的,编译器也需要基本方法来初始化vtable
.
https://en.cppreference.com/w/cpp/language/virtual
通过在类定义中声明它们,宏会隐式使用它们,并且需要对其进行定义。因为它们不是,链接会导致未定义的符号错误。
您可以删除声明或定义函数。
推荐阅读
- docker - 为什么 /var/run/docker.sock 的所有者和组在主机和容器之间有所不同?
- ruby-on-rails - 为什么使用 Webp-ffi gem 上传文件时出错?
- flutter - Flutter:在 List 内嵌套 Map 的条件
- javascript - 如何在我的节点应用程序中正确使用链填充方法?
- elixir - 根据一个 PubSub 事件更新所有 Phoenix LiveView 套接字
- c++ - 编译 CUDA cuSolver 特征值示例时出现编译错误
- android - 覆盖中带有 wrap_content 的 TextView 未扩展到完整内容宽度
- google-rich-snippets - 谷歌评论片段 VS 综合评分
- input - 如何选择表单中的所有输入
- image - 无法将 docker 镜像拉到代理后面