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

3
这是当前的情况:
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中以下虚函数是纯虚函数:
Base::methodA()
Base::methodB()

如何解决这个问题?

更新:现在已经编译成功了。我不知道我改变了什么。


8
真的是 Base * b; 而不是 Base b; 吗? - sharptooth
1
你的代码片段正确吗?它实际上可以编译并且是正确的。也许你原来的代码中有 'Base b' 而不是 'Base * b'。'Base b' 会导致你得到错误。 - Skizz
3
别忘了将基类析构函数声明为虚函数。 - Naveen
1
现在它已经编译成功了。我不知道我改了什么——魔法! - Ferdinand Beyer
2个回答

4
你的代码看起来正确无误。
由于你的基类是抽象的,所以不能创建它的对象,但是你肯定可以声明它的指针。
因此,你可能写成了Base b而不是Base *b,请检查一下。

2
你的代码片段在我的电脑上编译正常。你确定你正在使用指针类型Base* b,而不是Base b吗?请注意检查。

我猜不是,因为编译器错误提到了一个抽象类型,而不是指针。 - György Andrasek
1
@Jurily:是的,Base是抽象的。如果您尝试创建此类型的字段(Base b),编译器将抱怨无法声明字段MyClass :: b为抽象类型。虽然指向抽象类型的指针不是抽象的,但OP的示例(Base * p)应该可以工作。 - Ferdinand Beyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接