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
很少是必要的或明智的。将不起作用: