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;

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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...