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.
| 归档时间: |
|
| 查看次数: |
13909 次 |
| 最近记录: |