我有这个
A
/ \
B C
\ /
DA有一个纯虚拟函数,原型如下:
virtual A* clone(void) const = 0;B和C实际上继承自A( class B: public virtual A,class C: public virtual A)
B具有虚拟函数,原型如下:
virtual B* clone(void) const {}; C具有虚拟函数,原型如下:
virtual C* clone(void) const {};D从B&C继承而来,如下所示:class D: public B, public C D具有虚拟函数,原型如下:
virtual D* clone(void) const {};现在,在编译时,我得到了以下6行错误:
error C2250: 'D' : ambiguous inheritance of 'B *A::clone(void) const'不知道如何解决这个问题。
提前谢谢。
发布于 2010-08-29 06:10:41
避免钻石继承?;->
无论如何,这是样本(真正的样本-不要那样投射)
// ConsoleCppTest.cpp :定义控制台应用程序的入口点。//
#include "stdafx.h"
#include "iostream"
class A {
public:
virtual void* clone() = 0;
};
class B: public A {
public:
virtual void* clone() = 0;
};
class C: public A {
public:
virtual void* clone() = 0;
};
class D: public B, public C
{
public:
virtual void* B::clone()
{
std::cout << "B";
return (void*)this;
}
virtual void* C::clone()
{
std::cout << "C";
return (void*)this;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
D* d = new D();
void* b = ((B*)d)->clone();
void* c = ((C*)d)->clone();
return 0;
}发布于 2010-08-29 06:37:42
你在原始帖子中描述的内容是完全合法的。由Comeau在线编译器编译的一个快速示例代码完全可以做到这一点,没有任何错误
class A {
public: virtual A* clone() const = 0;
};
class B: public virtual A {
public: virtual B* clone() const { return 0; }
};
class C: public virtual A {
public: virtual C* clone() const { return 0; }
};
class D: public B, public C
{
public: virtual D* clone() const { return 0; }
};要么你没有做你所说的事情,要么你的编译器坏了。发布你正在尝试编译的真实代码。
P.S.我刚刚尝试在VS2010Express中编译它,得到了同样的错误。正如Gunslinger47在评论中所暗示的那样,这是VS2010编译器中的一个错误。
https://stackoverflow.com/questions/3592648
复制相似问题