C++ Qt:继承导致不明确

C++ Qt:继承导致不明确,c++,qt,C++,Qt,我有以下情况: class A: public QObject class B: public A, public QThread 然后,由于QObject被继承了两次,所以发生了继承不明确的情况。。。 有解决办法吗 有点棘手,但可能适合您: template<class T> class A: public T class B: public A<QThread> 模板 甲级:公共交通 B类:公共A 如果您需要单独使用,则: A<QObject>

我有以下情况:

class A: public QObject

class B: public A, public QThread
然后,由于QObject被继承了两次,所以发生了继承不明确的情况。。。
有解决办法吗

有点棘手,但可能适合您:

template<class T>
class A: public T

class B: public A<QThread>
模板
甲级:公共交通
B类:公共A
如果您需要单独使用,则:

A<QObject> *a = new A<QObject>;
A*A=新的A;
这种模式称为

更新


好的,我意识到moc系统显然无法与此解决方案配合使用。相反,我支持。

QThread
QObject
非虚拟继承。因此,如果不产生歧义,就无法从
QThread
QObject
继承层次结构。虚拟继承在这里没有帮助,因为您没有处理任何菱形继承模式

正如@Gabor Angyal所提到的,修复方法是修改您的设计


相关问题:

QObject基类的多重继承不起作用

您可以这样做来解决此问题:

class A: public QObject

class B: public A
{
    Q_OBJECT
public:
    //...
    QThread *threadController() { return &mThreadController; }

private:
    //...
    QThread mThreadController;

}
您还可以为所需的信号和插槽编写委托,而不是公开整个QThread对象,或者只为类B编写更高级别的API并将其内部QThread完全隐藏。这取决于你想做什么,真的


如果您真的需要将QThread子类化,那么只需将其用作成员变量类型。

我已经删除了我的答案
class A:公共虚拟QObject
无法解决您的问题。相关:似乎
QThread
QObject
非虚拟继承,因此您运气不佳。简短回答:不要这样做,而是使用Qt的父/子关系或普通组合,具体取决于您尝试执行的操作。另外请注意,在Qt中执行线程时,继承
QThread
很少是必要的或明智的。将不起作用: