在构造函数中使用 QNetworkAccessManager 派生类的未定义引用
Undefined reference to in Constructor with QNetworkAccessManager derived class
我正在尝试使用以下使用 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,以便实现"replyFinish"插槽。信号"已完成"已经是"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
如果您
使用的是QtCreator,请尝试在测试底部添加此行.cpp
#include "testing.moc"
相关文章:
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 对 Scalar ::Scalar() 的未定义引用
- 对复制 CTOR 和 CTOR 的未定义引用
- 对显式实例化的模板函数的未定义引用
- TensorRT (C++ API) 对"createNvOnnxParser_INTERNAL"的未定义引用
- 2个模板化类的非模板友元函数未定义引用错误
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 获取对function_name的未定义引用
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 对结构方法的未定义引用
- 使用内联函数 c++ 的未定义引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对 DLOPEN 的未定义引用
- QT C++中对全局变量的未定义引用
- 快速数学导致对"__pow_finite"的未定义引用
- 对 boost::system::d etail::system_category_instance 的未定义引用,从
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用