我正在尝试实现一个实现许多接口的相当大的对象。其中一些接口是纯虚拟的。我可能在钻石继承方面遇到问题。 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是我收到警告的六种方法之一。
答案 0 :(得分:22)
一切都绝对有效。允许编译器警告有效代码,这里没问题。您可以尝试使用using
声明来静音警告。如果这不起作用(可能是由于MSVC错误),请使用pragma
将其静音。