QUrl を QNetworkRequest コンストラクターに渡すと、コンパイラーから奇妙なエラーが発生します。特定のケースでのみ発生するのはさらに奇妙です。例を次に示します。
#include <QCoreApplication>
#include <QNetworkReply>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString str;
QNetworkRequest req(QUrl(str));
req.setUrl(QUrl(str)); // error: request for member 'setUrl' in 'req', which is of non-class type 'QNetworkRequest ()(QUrl)'
QNetworkRequest req2(QUrl(QString("http://google.com"))); // works here perfectly!
req2.setUrl(QUrl(str));
QNetworkRequest req3;
req3.setUrl(QUrl(str));
QUrl url(str);
QNetworkRequest req4(url);
req4.setUrl(QUrl(str));
return a.exec();
}
g++-4.2 は次のように言っています:
main.cpp:11: error: request for member 'setUrl' in 'req', which is of non-class type 'QNetworkRequest ()(QUrl)'
vs2010 コンパイラは次のように述べています。
error C2228: left of '.setUrl' must have class/struct/union
そして、「破損した」QNetworkRequest を QNetworkAccessManager::get メソッドに渡したい場合、vs2010 から追加の説明を取得します。
error C2664: 'QNetworkAccessManager::get' : cannot convert parameter 1 from 'QNetworkRequest (__cdecl *)(QUrl)' to 'const QNetworkRequest &'
Reason: cannot convert from 'overloaded-function' to 'const QNetworkRequest'
No constructor could take the source type, or constructor overload resolution was ambiguous
奇妙だ..誰か手がかりを持っていますか?プログラミングの仕方を忘れてしまったのかもしれません。