Qt多重继承模糊基类

时间:2016-05-11 06:18:03

标签: c++ qt multiple-inheritance

所以,我的类层次结构看起来像这样:

     QObject  QGraphicsPolygonItem
           \  /
            \/
          CBubble
            /\
           /  \
 CListBubble  CSingleLinkBubble
           \  /
            \/
       CActionBubble

我正在进行多重继承的原因是因为我有另一个气泡是CListBubble(LB),而不是CSingleLinkBubble(SB)。

我收到的错误是“CBubble是一个模糊的CActionBubble基础”。

  • 我在其中一个或两个上尝试过虚拟标记。
  • 我尝试将“虚拟CBubble”添加到CActionBubble。
  • 我尝试在LB和SB中更改为“public virtual CBubble”,但这会导致从它们继承的所有气泡中出现问题。

我可以完全放弃CListBubble并复制/拼写代码,但这违背了我的所有直觉。我可以尝试重构这个以使用装饰器模式,但对于这种情况,这似乎是很多不必要的工作。

非常感谢任何帮助或建议。 感谢。

编辑: 我道歉,应该阅读MCVE规则 注意 - 我现在只是输入了这个,所以希望没有任何语法问题,但我认为它可以解决这个问题。

clistbubble.h

// header guard
#include "cbubble.h"

class CListBubble : public CBubble
{
public:
    CListBubble(const QPointF & pos, QGraphicsItem *parent = 0);

    // data members/methods
};

clistbubble.cpp

#include "clistbubble.h"

CListBubble(const QPointF & pos, QGraphicsItem *parent)
  : CBubble(pos, parent) // rest of base member initialization
{
       // other stuff for this type of bubble
}

// Other methods

CSingleLinkBubble的标题在除成员和方法之外的所有标题中都是等效的。

cactionbubble.h

// header guard
#include "csinglelinkbubble.h"
#include "clistbubble.h"

class CActionBubble : public virtual CSingleLinkBubble, public virtual CListBubble
{
public:
    CActionBubble(const QPointF & pos, QGraphicsItem *parent);

    // data members/methods
};

cactionbubble.cpp

#include "cactionbubble.h"

CActionBubble(const QPointF & pos, QGraphicsItem *parent)
  : CSingleLinkBubble(pos, parent), CListBubble(pos, parent) // rest of base member initialization
{
       // other stuff for this type of bubble
}

我担心问题出在CActionBubble的构造函数中,其中两个父类都被调用。但是,如果我实现了默认的ctor,那么这两个调用都是必要的,并且无论如何都会发生。

错误将我指向我尝试新建CActionBubble的地方。 “CBubble是一个模糊的CActionBubble基础”

我也忘了提到CBubble继承自QObject,所以我可以实现信号和插槽。我读了一段时间后,用QObject进行多重继承是不可能的。可能是这是实际问题,错误只是指向下面的一层?

0 个答案:

没有答案