gpt4 book ai didi

c++ - 使用 QNetworkAccessManager 派生类在构造函数中 undefined reference

转载 作者:行者123 更新时间:2023-11-30 01:50:15 27 4
gpt4 key购买 nike

我正在尝试使用以下使用 Qt 库的代码读取 html 页面

 #include <QtWidgets/QApplication>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkAccessManager>
#include <QtCore/QString>
#include <iostream>

class SillyRequest : public QNetworkAccessManager

{
Q_OBJECT
public:
SillyRequest();
QString getData();
public slots:
void replyFinished(QNetworkReply *);
private:
QString collectedData;
};
QString SillyRequest :: getData()
{
return collectedData;
}
SillyRequest :: SillyRequest()
{
connect(this, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
}

void SillyRequest :: replyFinished(QNetworkReply *reply)
{
collectedData = reply->readAll();
}

int main(int argc, char **argv)
{
QApplication app(argc, argv);

SillyRequest *network = new SillyRequest;

QNetworkRequest request;

request.setUrl(QUrl("http://qt.nokia.com"));

request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");

QNetworkReply *reply = network->get(request);

std :: cout << network->getData().toStdString() << std :: endl;

return app.exec();

}

编译时出现以下错误。我不确定我做错了什么。

testing.cpp:(.text+0x73): undefined reference to `vtable for SillyRequest'
collect2: error: ld returned 1 exit status
Makefile:192: recipe for target 'network' failed
make: *** [network] Error 1

我继承自 QNetworkAccessManager 以实现“replyFinished”插槽。信号“完成”已经是“QNetworkAccessManager”的一部分。

最佳答案

您的短代码有很多问题,但我将在下面重点介绍其中最核心的部分。

包含moc文件

一般的做法是这样的:

void SillyRequest :: replyFinished(QNetworkReply *reply) 
{
collectedData = reply->readAll();
}

#include "main.moc" // This is the addition

int main(int argc, char **argv)

问题是您的类不在单独的头文件和源文件中,因此 qmake 和 moc 无法意识到这一点。

作为旁注,您还可以在这种特殊情况下内联所有方法。

单独的标题和来源

如果您不想显式包含动态生成的 moc(元对象编译器)文件,则需要为您自己的类建立一个单独的头文件(最好是源代码),然后您可以将头文件包含在您的 main.cpp 文件。然后,您将在 main.cpp 的开头执行此操作:

#include "sillyrequest.h"

自然地,您将按如下方式扩展 qmake 项目文件:

HEADERS = sillyrequest.h
SOURCES = sillyrequest.cpp main.cpp

关于c++ - 使用 QNetworkAccessManager 派生类在构造函数中 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27651453/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com