This question already has answers here:
C++ Undefined Reference to vtable and inheritance
(3个答案)
6年前关闭。
我有一个接口,我想用
我正在做一个关于Eclipse的相当大的项目,所以我将问题简化为几个小类。
ITestAdapter.h:
Testt.h:
Testt.cpp:
Test_main.cpp:
如果我根本不使用
Testt.cpp(已修改):
因此,我不明白为什么使用标头(为什么会是更好的解决方案)无法正常工作。
我希望我能清楚地解释我的问题是什么。如果没有,请询问。
(3个答案)
6年前关闭。
我有一个接口,我想用
header
中的功能创建一个interface
,并在此标头中实现该功能的.cpp
。但是尝试此操作时,我总是在undefined reference to 'vtable for Test'
文件中出现问题Testt.h
。我正在做一个关于Eclipse的相当大的项目,所以我将问题简化为几个小类。
ITestAdapter.h:
#ifndef ITESTADAPTER_H_
#define ITESTADAPTER_H_
class TestAdapter {
public:
virtual int test() = 0;
};
#endif /* ITESTADAPTER_H_ */
Testt.h:
#ifndef TESTT_H_
#define TESTT_H_
#include "ITestAdapter.h"
class Test: public TestAdapter{
public:
virtual int test();
};
#endif /* TESTT_H_ */
Testt.cpp:
#include "Testt.h"
int test() {
return 0;
}
Test_main.cpp:
#include <iostream>
#include "Testt.h"
using namespace std;
int main() {
Test t;
int i = t.test();
cout << i << endl;
return 0;
}
如果我根本不使用
Testt.h
并在Testt.cpp
中实现接口,并在主方法中将Testt.cpp
(我要避免的情况)包含在文件中,则它可以正常工作。Testt.cpp(已修改):
#include "ITestAdapter.h"
class Test: public TestAdapter {
public:
int test() {
return 0;
}
};
因此,我不明白为什么使用标头(为什么会是更好的解决方案)无法正常工作。
我希望我能清楚地解释我的问题是什么。如果没有,请询问。
最佳答案
您正在int test()
中定义非成员函数Testt.cpp
。您需要定义int Test::test()
:
int Test::test()
{// ^^^^
return 0;
}
08-27 01:00