微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/c/112336.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐