Cannot instantiate abstract class with multiple inheritance c++(无法实例化具有多继承c++的抽象类)
本文介绍了无法实例化具有多继承c++的抽象类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
实例化从具有抽象方法的其他类继承的类时,遇到编译器错误C2259
。
继承方案有点奇怪和不透明,但由于问题的一些限制,我需要这样做。
继承方案如下:
class A
{
public:
enum Animal { CAT, DOG };
enum Color { RED, GREEN };
enum Food { MEAT, FISH };
protected:
virtual Animal animal() const = 0;
virtual Color color() const = 0;
virtual Food food() const = 0;
};
class B: public A
{
Animal animal() const { return CAT; }
};
class C: public A
{
Color color() const { return GREEN; }
};
class D: public A
{
Food food() const { return FISH; }
};
然后我声明一个具有多重继承的类,如下所示:
class E : public B, public C, public D
{
};
在这里,当我尝试实例化类E
时,收到编译器错误C2259
:
error C2259: 'E': cannot instantiate abstract class
note: due to following members:
note: 'A::Color A::color(void) const': is abstract
note: see declaration of 'A::color'
note: 'A::Food A::food(void) const': is abstract
note: see declaration of 'A::food'
note: 'A::Animal A::animal(void) const': is abstract
note: see declaration of 'A::animal'
我做错了什么?
非常感谢
哈维尔
推荐答案
您在E
中有3个不同的A
对象,您忘记将继承标记为虚拟,以便使用相同的A
对象:
class A
{
public:
enum Animal { CAT, DOG };
enum Color { RED, GREEN };
enum Food { MEAT, FISH };
virtual ~A(){}
protected:
virtual Animal animal() const = 0;
virtual Color color() const = 0;
virtual Food food() const = 0;
};
class B: public virtual A
{
Animal animal() const override { return CAT; }
};
class C: public virtual A
{
Color color() const override { return GREEN; }
};
class D: public virtual A
{
Food food() const override { return FISH; }
};
class E : public B, public C, public D
{
};
int main()
{
E e;
}
这篇关于无法实例化具有多继承c++的抽象类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:无法实例化具有多继承c++的抽象类


基础教程推荐
猜你喜欢
- 我有静态或动态 boost 库吗? 2021-01-01
- 这个宏可以转换成函数吗? 2022-01-01
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 常量变量在标题中不起作用 2021-01-01
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- 如何在 C++ 中初始化静态常量成员? 2022-01-01