文件 A.h
#ifndef A_H_
#define A_H_
class A {
public:
virtual ~A();
virtual void doWork();
};
#endif
文件 Child.h
#ifndef CHILD_H_
#define CHILD_H_
#include "A.h"
class Child: public A {
private:
int x,y;
public:
Child();
~Child();
void doWork();
};
#endif
和 Child.cpp
#include "Child.h"
Child::Child(){
x = 5;
}
Child::~Child(){...}
void Child::doWork(){...};
编译器说 A
对 vtable 的引用未定义。
我尝试了很多不同的方法,但都没有奏效。
我的目标是让 A
类成为一个接口(interface),并将实现代码与 header 分开。
最佳答案
为什么会出现错误以及如何解决?
您需要提供 definitions 用于 class A
中的所有虚函数。只有纯虚函数才允许没有定义。
即:在 class A
两种方法:
virtual ~A();
virtual void doWork();
应该被定义(应该有一个主体)
例如:
A.cpp
void A::doWork()
{
}
A::~A()
{
}
警告:
如果您希望您的 class A
充当接口(interface)(在 C++ 中也称为 Abstract class ),那么您应该将方法设为纯虚拟。
virtual void doWork() = 0;
好读:
What does it mean that the "virtual table" is an unresolved external?
When building C++, the linker says my constructors, destructors or virtual tables are undefined.
关于C++ 未定义对 vtable 和继承的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9406580/