visual c++在vs 2010中出现了模糊继承错误
visual C++, ambiguous inheritance error in vs 2010
我在这个例子中使用多态性有一些问题。这个问题和我上一个问题很相似
c++,虚拟继承,奇怪抽象类+克隆问题
有三个抽象类:
class A
{
public:
virtual A * copy () const = 0;
virtual ~A() = 0;
};
A::~A(){}
class B
{
public:
virtual B * copy () const = 0;
virtual ~B() = 0;
};
B::~B(){}
class C: virtual public A , public B
{
public:
virtual C * copy () const = 0;
virtual ~C() = 0;
};
C::~C(){}
和两个使用虚拟继承
的继承类class D: virtual public A
{
public:
virtual D * copy () const {return new D (*this);}
virtual ~D() {}
};
class E: virtual public D , public C
{
public:
virtual E * copy () const {return new E (*this);}
virtual ~E() {}
}; //Error C2250: 'E' : ambiguous inheritance of 'D *A::copy(void) const
上面提到的错误只发生在使用MSVS 2010编译器,g++编译此代码OK。
类图(简化)
.......... A .... B.....
........../...../......
........./...../.......
......../...../........
.......D...... C........
............./.........
............/..........
.........../...........
...........E............
最后的讨论以结果结束:从c类中删除copy()方法的声明。
class C: virtual public A , public B
{
public:
//virtual C * copy () const = 0; //remove declaration
virtual ~C() = 0;
};
C::~C(){}
我的样本代码使用多态性需要创建指向c的指针向量。删除一些元素后,我想创建它的副本…我需要在C类中声明copy(),因此删除声明是不够的,它并不能解决问题。
int main(int argc, char* argv[])
{
std::vector <C*> items;
items.push_back(new E());
items.push_back(new E());
items[0]->copy();
return 0;
}
你能帮助我,请如何纠正代码是可翻译的使用VS 2010?
这是Visual c++中一个已知的bug:
Visual c++在协方差与虚拟继承一起使用时错误地报告歧义
您要么需要消除协方差,要么需要消除虚拟继承。不幸的是,你不能两者兼得。
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 公共与私人继承
- 如何创建从同一类继承的不同对象的向量
- 如何从另一个文件继承私有成员变量和公共函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 带有继承的C++工厂
- 多重继承导致虚假的模糊虚拟函数过载
- C++异常继承模糊性
- 修复C++多继承模糊调用
- GCC vs clang -使用' make_overload '可变lambda继承时的模糊重载
- 具有多重继承的模糊基
- visual c++在vs 2010中出现了模糊继承错误