QNetworkReply 的体系结构 x86_64 的未定义符号
Undefined symbols for architecture x86_64 with QNetworkReply
我不断收到以下错误:
体系结构的未定义符号 x86_64:“checkinapp::myOnFinishedSlot(QNetworkReply*)”,引用自:“checkinapp::qt_static_metacall(QObject*,QMetaObject::Call,int,void**) in moc_checkinapp.o
我翻了好几遍也想不通哪里错了。 (我是 C++ 的新手,所以很抱歉,我可能错过了一些明显的东西)。感谢您的帮助:)
这是我的 class:
class checkinapp : public QMainWindow
{
Q_OBJECT
public:
checkinapp(QWidget *parent = nullptr);
~checkinapp();
void databasehandler(QWidget *parent = nullptr);
int stressed;
int happy;
int hungry;
int tired;
int gender;
bool help;
int grade;
bool submitted;
void post()
{
m_networkManager = new QNetworkAccessManager ( this );
QVariantMap newUser;
newUser[ "Stress" ] = QString::number(stressed);
newUser[ "Sleep" ] = QString::number(tired);
newUser[ "Hungry" ] = QString::number(hungry);
newUser[ "Happy" ] = QString::number(happy);
newUser[ "Grade" ] = QString::number(grade);
newUser[ "Date" ] = "1/10/21";
newUser[ "Gender" ] = QString::number(gender);
newUser[ "Aid" ] = QString::number(help);
QJsonDocument jsonDoc = QJsonDocument::fromVariant( newUser );
QNetworkRequest newUserRequest( QUrl( "url/User.jason"));
newUserRequest.setHeader( QNetworkRequest::ContentTypeHeader, QString( "application/json" ));
connect(m_networkManager, &QNetworkManager::finished, this, &checkinapp::myOnFinishSlot); // the error is here
m_networkManager->post( newUserRequest, jsonDoc.toJson() );
}
void exit()
{
QApplication::quit();
}
public slots:
void myOnFinishSlot(QNetworkReply* x) { exit(); }
private slots:
void on_happy_valueChanged(int value);
void on_hungry_valueChanged(int value);
void on_sleep_valueChanged(int value);
void on_stress_valueChanged(int value);
void on_male_toggled(bool checked);
void on_female_toggled(bool checked);
void on_other_toggled(bool checked);
void on_help_toggled(bool checked);
void on_pushButton_clicked();
private:
Ui::checkinapp *ui;
QNetworkAccessManager * m_networkManager;
QNetworkReply * m_networkReply;
};
你的声明
void myOnFinishSlot(QNetworkReply* x)
不符合您的定义:
void myOnFinishSlot()
您有效地定义了两个具有不同重载的方法。
合并定义和声明:
public slots:
void myOnFinishSlot(QNetworkReply* x) { exit(); }
或者将定义移到 class
块之外:
void checkinapp::myOnFinishSlot(QNetworkReply* x) { exit(); }
此外,不要使用 SIGNAL/SLOT 表示法,因为它会在运行时导致难以调试的错误。您的 connect
调用应该是:
connect(m_networkManager, &QNetworkAccessManager::finished, this, &checkinapp::myOnFinishSlot);
我不断收到以下错误: 体系结构的未定义符号 x86_64:“checkinapp::myOnFinishedSlot(QNetworkReply*)”,引用自:“checkinapp::qt_static_metacall(QObject*,QMetaObject::Call,int,void**) in moc_checkinapp.o
我翻了好几遍也想不通哪里错了。 (我是 C++ 的新手,所以很抱歉,我可能错过了一些明显的东西)。感谢您的帮助:)
这是我的 class:
class checkinapp : public QMainWindow
{
Q_OBJECT
public:
checkinapp(QWidget *parent = nullptr);
~checkinapp();
void databasehandler(QWidget *parent = nullptr);
int stressed;
int happy;
int hungry;
int tired;
int gender;
bool help;
int grade;
bool submitted;
void post()
{
m_networkManager = new QNetworkAccessManager ( this );
QVariantMap newUser;
newUser[ "Stress" ] = QString::number(stressed);
newUser[ "Sleep" ] = QString::number(tired);
newUser[ "Hungry" ] = QString::number(hungry);
newUser[ "Happy" ] = QString::number(happy);
newUser[ "Grade" ] = QString::number(grade);
newUser[ "Date" ] = "1/10/21";
newUser[ "Gender" ] = QString::number(gender);
newUser[ "Aid" ] = QString::number(help);
QJsonDocument jsonDoc = QJsonDocument::fromVariant( newUser );
QNetworkRequest newUserRequest( QUrl( "url/User.jason"));
newUserRequest.setHeader( QNetworkRequest::ContentTypeHeader, QString( "application/json" ));
connect(m_networkManager, &QNetworkManager::finished, this, &checkinapp::myOnFinishSlot); // the error is here
m_networkManager->post( newUserRequest, jsonDoc.toJson() );
}
void exit()
{
QApplication::quit();
}
public slots:
void myOnFinishSlot(QNetworkReply* x) { exit(); }
private slots:
void on_happy_valueChanged(int value);
void on_hungry_valueChanged(int value);
void on_sleep_valueChanged(int value);
void on_stress_valueChanged(int value);
void on_male_toggled(bool checked);
void on_female_toggled(bool checked);
void on_other_toggled(bool checked);
void on_help_toggled(bool checked);
void on_pushButton_clicked();
private:
Ui::checkinapp *ui;
QNetworkAccessManager * m_networkManager;
QNetworkReply * m_networkReply;
};
你的声明
void myOnFinishSlot(QNetworkReply* x)
不符合您的定义:
void myOnFinishSlot()
您有效地定义了两个具有不同重载的方法。
合并定义和声明:
public slots:
void myOnFinishSlot(QNetworkReply* x) { exit(); }
或者将定义移到 class
块之外:
void checkinapp::myOnFinishSlot(QNetworkReply* x) { exit(); }
此外,不要使用 SIGNAL/SLOT 表示法,因为它会在运行时导致难以调试的错误。您的 connect
调用应该是:
connect(m_networkManager, &QNetworkAccessManager::finished, this, &checkinapp::myOnFinishSlot);