我有一个项目正在尝试向其中添加google-test
单元测试。它的结构如下:
VM(项目)
some source files
BytecodePrograms.h
VMTest (项目,通过添加项目->谷歌测试->动态链接,测试VM
)
pch.h
test.cpp
我在VM
属性中添加了我的VMTest
项目作为包含目录-> c / c ++->常规->其他包含目录
内容是:
test.cpp
如果我构建,会出现以下错误
#include "pch.h"
#include "BytecodePrograms.h"
TEST(TestCaseName, TestName) {
EXPECT_EQ(8, VMFibonacciImp(6));
EXPECT_TRUE(true);
}
但是,我的Error LNK2019 unresolved external symbol "public: __thiscall WVM::WVM(void)" (??0WVM@@QAE@XZ) referenced in function "int __cdecl VMFibonacciImp(int)" (?VMFibonacciImp@@YAHH@Z) WVMTest C:\Users\WadeMcCall\source\repos\Virtual Machine Visual Scripting\WVMTest\test.obj 1
Error LNK2019 unresolved external symbol "public: __thiscall WVM::~WVM(void)" (??1WVM@@QAE@XZ) referenced in function "int __cdecl VMFibonacciImp(int)" (?VMFibonacciImp@@YAHH@Z) WVMTest C:\Users\WadeMcCall\source\repos\Virtual Machine Visual Scripting\WVMTest\test.obj 1
Error LNK2019 unresolved external symbol "public: int __thiscall WVM::interpret(class std::vector<int,class std::allocator<int> >)" (?interpret@WVM@@QAEHV?$vector@HV?$allocator@H@std@@@std@@@Z) referenced in function "int __cdecl VMFibonacciImp(int)" (?VMFibonacciImp@@YAHH@Z) WVMTest C:\Users\WadeMcCall\source\repos\Virtual Machine Visual Scripting\WVMTest\test.obj 1
项目定义了VM
类并使用它并且可以构建和运行它,并且WVM
包含BytecodePrograms.h
,该类具有该类的声明。
我觉得这一定是我在Visual Studio中设置项目的问题,但是我不知道。我已经连续搜寻了2天,发现其他人也有类似的问题,但是他们的解决方案似乎对我没有用。
有什么想法吗?谢谢。
答案 0 :(得分:0)
这是一个链接错误,表明它找到了.h文件,但找不到在.cpp中找到的实际实现。如果您有一个LIB项目,则Visual Studio可能会将cpp代码编译到LIB项目中,并将其添加到您的EXE项目中。
要将代码合并到测试项目中,您有两个选择。
答案 1 :(得分:0)
我在这里找到了解决方案:https://stackoverflow.com/a/19709712/8488701
类似于史蒂夫的建议,除了创建一个新项目之外,我使用构建后事件将我的项目构建到一个库中,然后将google test链接到该库。与Steve解决方案相比,此方法的优势在于您根本不需要修改主项目,并且仍然可以在其之上构建单元测试项目。