c – Visual Studio编译器警告C4250(‘class1’:通过支配继承’class2 :: member’)

前端之家收集整理的这篇文章主要介绍了c – Visual Studio编译器警告C4250(‘class1’:通过支配继承’class2 :: member’)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下代码生成警告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(); }
}

大家对此有何看法?

解决方法

你尝试从A类继承公共虚拟机吗?我认为应该解决它.
class B :public virtual A;
    class C :public virtual A;
    class D : public virtual B,public virtual C;

虚拟继承假设解决了歧义.

原文链接:https://www.f2er.com/c/112336.html

猜你在找的C&C++相关文章