所以,我的类层次结构看起来像这样:
QObject QGraphicsPolygonItem
\ /
\/
CBubble
/\
/ \
CListBubble CSingleLinkBubble
\ /
\/
CActionBubble
我正在进行多重继承的原因是因为我有另一个气泡是CListBubble(LB),而不是CSingleLinkBubble(SB)。
我收到的错误是“CBubble是一个模糊的CActionBubble基础”。
我可以完全放弃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进行多重继承是不可能的。可能是这是实际问题,错误只是指向下面的一层?