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
)应该可以工作。