QT HTTP GET,出了什么问题?

时间:2015-08-20 11:30:07

标签: c++ qt get qthttp

这是代码:

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;必须是阶级,结构或联盟

2 个答案:

答案 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();
                         ^~