C++ Qt,无法转换类型不完整的参数';A*';至';const QObject*';

C++ Qt,无法转换类型不完整的参数';A*';至';const QObject*';,c++,qt,C++,Qt,我是Qt新手,当我研究时隙/信号时,我发现奇怪的行为 如果我写下面的代码,就可以了 class A; class B; class A : public QObject { Q_OBJECT signals: void signal(B*); }; class B : public QObject { Q_OBJECT public slots: void slot(B*) {}; public: void f(A* a) { connect(a

我是Qt新手,当我研究时隙/信号时,我发现奇怪的行为

如果我写下面的代码,就可以了

class A;
class B;

class A : public QObject {
Q_OBJECT

signals:
    void signal(B*);
};

class B : public QObject {
Q_OBJECT

public slots:
    void slot(B*) {};

public:
    void f(A* a) {
        connect(a, SIGNAL(signal(B*)), this, SLOT(slot(B*)));
    }
};
但如果我交换A类和B类的定义:

class A;
class B;

class B : public QObject {
Q_OBJECT

public slots:
    void slot(B*) {};

public:
    void f(A* a) {
        connect(a, SIGNAL(signal(B*)), this, SLOT(slot(B*)));
    }
};

class A : public QObject {
Q_OBJECT

signals:
    void signal(B*);
};
我得到一个错误:

main.cpp:30:9: error: no matching member function for call to 'connect'
    connect(a, SIGNAL(signal(B*)), this, SLOT(slot(B*)));
    ^~~~~~~
/Users/Alexander/Qt/5.3/clang_64/lib/QtCore.framework/Headers/qobject.h:198:36:
    note: candidate function not viable: 
        cannot convert argument of incomplete type 'A *' to 'const QObject *'
        static QMetaObject::Connection connect(const QObject *sender, const char *signal,
为什么会这样

我使用qt5.3

谢谢


p、 对不起,我的英语太差了。

为了了解发生了什么事,摆脱所有的障碍可能是个好主意:

class QObject {};
class A;

void connect(QObject*) {}

void f(A* a) {
    connect(a);
}

class A : public QObject {};

int main()
{
    A a;
    f(&a);
}
这是一个简化版本的什么,你已经和经验相同的问题。问题是在调用
connect
时,
A
只被前向声明。编译器还不知道
A
继承自
QObject
。只有在以后您才能定义
A
并指定它。要使其正常工作,
A
的定义必须在调用
connect
之前