41

我正在尝试实现一个实现许多接口的相当大的对象。其中一些接口是纯虚拟的。我可能在钻石继承上有问题。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 编译器警告 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图中是 Big,gge::graphics::ImageTexture是 D,drawin 是我收到警告的六种方法之一。

4

1 回答 1

25

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

于 2011-07-28T19:55:43.677 回答