C++ Qt,无法转换类型不完整的参数';A*';至';const QObject*';
我是Qt新手,当我研究时隙/信号时,我发现奇怪的行为 如果我写下面的代码,就可以了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
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
之前