У меня есть следующий класс:
// 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
vtable для IVirtualController'test/input/InputManagerTest.o: В функции
MockController::MockController()': test/input/InputManagerTest.cpp:15: undefined reference to
IVirtualController::~IVirtualController()'test/input/InputManagerTest.o:(.rodata._ZTI14MockController[_ZTI14MockController]+0x10): неопределенная ссылка на `typeinfo для IVirtualController'
Поиск сказал мне, что ошибки «неопределенная ссылка на vtable/typeinfo» вызваны отсутствующей реализацией, отсутствующим «= 0» за объявлением виртуального метода или не виртуальным деструктором. Класс IVirtualController не реализован, но это не должно быть проблемой, поскольку его реализует MockController, верно? Комментирование всего фиктивного файла InputManagerTest.cpp «решает» проблему, несмотря на то, что IVirtualController используется в другом классе.
Как мне это проверить?