Mar*_*ram 11 c++ warnings multiple-inheritance visual-studio-2008
以下代码生成警告C4250.我的问题是,什么是最好的解决方案?
class A
{
virtual void func1();
}
class B : public A
{
}
class C : public A
{
virtual void func1();
}
class D : public B, public C
{
}
int main()
{
D d;
d.func1(); // Causes warning
}
Run Code Online (Sandbox Code Playgroud)
根据我所读到的,应该可以这样做:
class D : public B, public C
{
using B::func1();
}
Run Code Online (Sandbox Code Playgroud)
但是,这实际上并没有做任何事情.我目前解决它的方式是:
class D : public B, public C
{
virtual void func1() { B::func1(); }
}
Run Code Online (Sandbox Code Playgroud)
大家对此有什么看法?
Dan*_*eer 20
我对以下代码有相同的警告:
class Interface
{
public:
virtual void A() = 0;
};
class Implementation : public virtual Interface
{
public:
virtual void A() {};
};
class ExtendedInterface : public virtual Interface
{
virtual void B() = 0;
};
class ExtendedImplementation : public ExtendedInterface , public Implementation
{
public:
virtual void B() {};
};
Run Code Online (Sandbox Code Playgroud)
这个msdn中的Visual C++ 2005 错误报告表明这是一个已知错误,被认为不足以修复......他们建议在这种情况下使用pragma禁用警告.我认为在你的情况下它也是安全的,但你应该使用如Gal Galman的答案中所示的虚拟继承.
您是否尝试从A类继承公共虚拟?我认为它应该解决它.
class B :public virtual A;
class C :public virtual A;
class D : public virtual B, public virtual C;
Run Code Online (Sandbox Code Playgroud)
虚拟继承假设解决模糊性.
| 归档时间: |
|
| 查看次数: |
9097 次 |
| 最近记录: |