我有以下课程:
// IVirtualController.hpp
class IVirtualController
{
public:
virtual InputCode validate(int keycode) = 0;
virtual ~IVirtualController();
};
现在我想模拟这个类:
// InputManagerTest.cpp
class MockController : public IVirtualController
{
public:
MOCK_METHOD1(validate,InputCode(int keycode));
};
但这不起作用!我收到以下错误:
test/input/InputManagerTest.o:在函数
MockController::~MockController()': test/input/InputManagerTest.cpp:19: undefined reference to
IVirtualController::~IVirtualController()' 中 test/input/InputManagerTest.cpp:19:未定义对 `IVirtualController::~IVirtualController()' 的引用test/input/InputManagerTest.o:在
IVirtualController::IVirtualController()': test/input/../../src/input/IVirtualController.hpp:14: undefined reference to
IVirtualController 的函数 vtable 中测试/输入/InputManagerTest.o:在函数
MockController::MockController()': test/input/InputManagerTest.cpp:15: undefined reference to
IVirtualController::~IVirtualController()'测试/输入/InputManagerTest.o:(.rodata._ZTI14MockController[_ZTI14MockController]+0x10): 未定义对“IVirtualController 的类型信息”的引用
搜索告诉我“未定义对 vtable/typeinfo 的引用”错误是由缺少实现、虚拟方法声明后面缺少“= 0”或非虚拟析构函数引起的。IVirtualController 类没有实现,但这应该不是问题,因为 MockController 正在实现它,对吧?注释掉整个 InputManagerTest.cpp 模拟文件“解决”了这个问题,即使 IVirtualController 在另一个类中使用。
我该如何测试它?