我的类(class)中有三门课,
class A {
public:
virtual ~A() {
decompose();
}
virtual void decompose();
};
class B:public A {
private:
int *b_data;
public:
void decompose() {
if (b_data != NULL) delete [] b_data;
}
};
class C:public A {
private:
int *c_data;
public:
void decompose() {
if (b_data != NULL) delete [] c_data;
}
};
但是当我用 g++ 编译此代码时,出现错误:
In function `~A':
undefined reference to `vtable for A'
undefined reference to `A::decompose()'
In function `A':
undefined reference to `vtable for A'
undefined reference to `typeinfo for A'
undefined reference to `typeinfo for A'
如果有帮助的话,类 A
是在 .h
文件中定义的,它的析构函数是内联定义的,另外两个类有两个文件 .h
和 .cpp
。
在我的程序中,我根据以下方式调用这些类:
int main() {
A *a;
a = new B(); //constructor is defined
delete a;
return 0;
}
这段代码有问题吗?
最佳答案
在构造函数和析构函数中调用虚函数时要小心。它们不会像平常一样被覆盖。 A(..)
和 ~A()
始终调用 A::decompose
。我认为编译器提示它找不到这个函数。
关于c++ - 对父类中方法的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22750855/