情况就是这样:
class Base {
virtual void methodA() = 0;
virtual void methodB() = 0;
};
class Base_A : public Base {
void methodA();
void methodB();
};
class Base_B : public Base {
void methodA();
void methodB();
};
class MyClass {
private:
Base * b;
};
编译时会显示错误消息:
error: cannot declare field MyClass::b to be of abstract type because the following virtual functions are pure within Base:
Base::methodA()
Base::methodB()
如何解决这个问题?
更新 它现在编译。我不知道我改变了什么
答案 0 :(得分:4)
您的代码似乎正确且完美。
你的基类是抽象的,所以你不能创建它的对象, 但你可以肯定地声明它的指针。
所以你可能写过Base b而不是Base * b,请检查它。
答案 1 :(得分:2)
您的代码段在我的计算机上编译得很好。您确定使用的是Base* b
,即。指针类型而不是Base b
?