2015-08-20 41 views
-1

這是代碼:發現QT HTTP GET,有什麼問題?

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: '的QObject :: 連接':無3過載可以轉換各種主題

.. \ request.cp P(20):錯誤C2228:該元素添加到 左「獲得」必須是

回答

3

這被稱爲most vexing parse類,結構或聯合,編譯器認爲mgr是一個函數聲明。爲了解決這個問題,只是改變

QNetworkAccessManager mgr(); 

QNetworkAccessManager mgr; 

您還在你connect有一個錯誤,它應該是這樣的(注意mgr&之前,因爲connect預計指針):

QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit())); 
1

你有額外的括號。用途:

QNetworkAccessManager mgr; 

QNetworkAccessManager沒有不帶參數的構造函數,因此分析器理解它像函數聲明。 你也可能會在第二行發出警告,如:

: warning: empty parentheses interpreted as a function declaration [-Wvexing-parse] 
QNetworkAccessManager mgr(); 
         ^~