这是代码:
QEventLoop eventLoop;
QNetworkAccessManager mgr();
QObject::connect(mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
QUrl url(site);
QNetworkRequest req(url);
QNetworkReply *reply = mgr.get(req);
eventLoop.exec();
if (reply->error() == QNetworkReply::NoError) {
cout << "Success" endl;
delete reply;
}
else {
cout << "Failure" endl;
delete reply;
}
发现错误:
.. \ request.cpp(17):错误C2665:&#39; QObject :: 连接&#39;:3重载都不能转换所有类型的主题
和
.. \ request.cpp(20):错误C2228:元素到了 左边的&#39; .get&#39;必须是阶级,结构或联盟
答案 0 :(得分:3)
这称为most vexing parse,编译器认为mgr
是函数声明。要解决此问题,只需更改
QNetworkAccessManager mgr();
到
QNetworkAccessManager mgr;
你的connect
也有错误,它应该是这样的(注意&
之前的mgr
,因为connect
需要指针):
QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
答案 1 :(得分:1)
你有额外的括号。使用:
QNetworkAccessManager mgr;
QNetworkAccessManager
没有没有参数的构造函数,因此解析器将其理解为函数声明。
你也可能在第二行收到警告,例如:
: warning: empty parentheses interpreted as a function declaration [-Wvexing-parse]
QNetworkAccessManager mgr();
^~