我对c ++还是比较陌生,并且实现如下:
class A {
virtual void func1() = 0;
};
class B : A {
void func1() override{
// imlement func1 here
}
virtual func2() = 0;
}
class C : B {
void func2() override{
// implement func2 here;
}
}
这些类打包为它们自己的二进制文件,并且可以单独构建。
B构建成功,但是当我构建C时,它给出了“未定义对vtable的引用”错误。 要摆脱它,我必须在C中实现func1()。
但是对于func1(),我希望在B中实现(因为在我的项目中,B是现有的遗留类)在C中而不是在C中。有办法吗?
谢谢
答案 0 :(得分:0)
我喜欢@David C. Rankin's参考。您应该尝试至少在类A和B(可能还有C)中添加虚拟默认析构函数。另外,在您的代码段中,您缺少了一些东西(例如B的func2定义上的返回类型,等等)。这是带有虚拟默认析构函数的清理示例:
class A {
public:
virtual void func1() = 0;
virtual ~A() = default;
};
class B : A {
public:
void func1() override {
// implement func1 here;
}
virtual void func2() = 0;
virtual ~B() = default;
};
class C : public B {
public:
void func2() override {
// implement func2 here;
}
virtual ~C() = default;
};