C++ C++;错误:无法将字段声明为抽象类型

C++ C++;错误:无法将字段声明为抽象类型,c++,C++,情况就是这样: 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 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;   
};  
编译时,它会显示错误消息:


错误:无法将字段MyClass::b声明为抽象类型,因为以下虚拟函数在基中是纯函数:
Base::methodA()
Base::methodB()

如何解决这个问题

更新
现在可以编译了。我不知道我改变了什么

你的代码片段在我的电脑上编译得很好。您确定您使用的是
Base*b
,即指针类型而不是
Base b

您的代码似乎正确且完美

基类是抽象的,所以不能创建它的对象, 但您可以明确声明它的指针


因此,您可能编写了Base b而不是Base*b,请检查它。

它真的是
Base*b和非
基b?您的代码片段正确吗?它实际上编译正常,并且是正确的。也许您的原始代码使用了“Base b”而不是“Base*b”Base b'将给出您得到的错误。另外..别忘了将Base析构函数设置为虚拟。“它现在可以编译了。我不知道我改变了什么”-Magic!我猜不是,因为编译器错误讨论的是抽象类型,而不是指针。@Jurily:是的,Base是抽象的。如果尝试创建此类型的字段(
Base b
),编译器将抱怨无法将字段MyClass::b声明为抽象类型。但是,指向抽象类型的指针不是抽象的,OP的示例(
Base*p
)应该可以工作。