C++继承通过支配警告

Cem*_*ncu 40 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
Run Code Online (Sandbox Code Playgroud)

在整个树中,只有D实现了虚方法,没有其他相关方法的定义.B的所有虚拟方法都列在警告中.如果重要,D是一个完整的类.

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

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

注1:这不是Visual Studio Compiler警告C4250('class1':通过优势继承'class2 :: member')的重复,我尝试了那里提出的解决方案.

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

编辑: 完整警告如下:

warning C4250: 'gge::resource::ImageResource' : inherits 
'gge::graphics::ImageTexture::gge::graphics::ImageTexture::drawin' 
via dominance
Run Code Online (Sandbox Code Playgroud)

gge::resource::ImageResource在绘图中是大的,gge::graphics::ImageTexture是D,drawin是我得到警告的六种方法之一.

n. *_* m. 23

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

  • @DeniseSkidmore:它应该是`using base :: method;`但它无论如何都不适用于VC++,而其他编译器也不需要它. (4认同)