以下代码生成警告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 }
根据我所读到的,应该可以这样做:
class D : public B, public C { using B::func1(); }
但是,这实际上并没有做任何事情.我目前解决它的方式是:
class D : public B, public C { virtual void func1() { B::func1(); } }
大家对此有什么看法?
我对以下代码有相同的警告:
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() {}; };
这个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;
虚拟继承假设解决模糊性.