C ++继承通过支配警告

时间:2011-07-28 19:28:20

标签: c++ virtual-inheritance diamond-problem

我正在尝试实现一个实现许多接口的相当大的对象。其中一些接口是纯虚拟的。我可能在钻石继承方面遇到问题。 Visual Studio正在报告C4250 ('class1' : inherits 'class2::member' via dominance)的警告。首先,这些类实际上是应该继承的。以下是导致此问题的部分类设计。

A        B        C
 \      / \      /
  \    /   \    /
    AB       BC 
    |         |
    |        BC2
    |         |
     \        D: Implementation of B, C, BC, BC2
      \      /
        Big

在整个树中,只有D实现虚方法,没有其他方法定义。 B的所有虚拟方法都列在警告中。如果重要的话,D是一个完整的课程。

我读到这种情况发生在Boost序列化中,忽略警告是安全的。

这个方法我试图实现有效吗?忽视这个警告是否安全?

注1:这不是Visual Studio Compiler warning C4250 ('class1' : inherits 'class2::member' via dominance)的重复,我尝试了那里提出的解决方案。

注2:我也可以发送类图,但它比这复杂一点。

修改 完全警告如下:

warning C4250: 'gge::resource::ImageResource' : inherits 
'gge::graphics::ImageTexture::gge::graphics::ImageTexture::drawin' 
via dominance

gge::resource::ImageResource在图纸中很大,gge::graphics::ImageTexture是D,drawin是我收到警告的六种方法之一。

1 个答案:

答案 0 :(得分:22)

一切都绝对有效。允许编译器警告有效代码,这里没问题。您可以尝试使用using声明来静音警告。如果这不起作用(可能是由于MSVC错误),请使用pragma将其静音。