dar*_*ock 4 c++ g++ qt4 visual-studio-2010
当我将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();
}
Run Code Online (Sandbox Code Playgroud)
g ++ - 4.2说:
main.cpp:11: error: request for member 'setUrl' in 'req', which is of non-class type 'QNetworkRequest ()(QUrl)'
Run Code Online (Sandbox Code Playgroud)
vs2010编译器说:
error C2228: left of '.setUrl' must have class/struct/union
Run Code Online (Sandbox Code Playgroud)
当我想将"损坏的"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
Run Code Online (Sandbox Code Playgroud)
多奇怪..谁有线索?也许我只是忘了如何编程..
你遇到了一个所谓的"烦恼的解析".这个:
QNetworkRequest req(QUrl(str));
Run Code Online (Sandbox Code Playgroud)
相当于
QNetworkRequest req(QUrl str);
Run Code Online (Sandbox Code Playgroud)
这是一个函数声明.
要声明变量并从临时初始化它,您需要
QNetworkRequest req{QUrl{str}}; // C++11
QNetworkRequest req = QNetworkRequest(QUrl(str)); // Historic C++ (if it's copyable)
Run Code Online (Sandbox Code Playgroud)
或者使用命名变量而不是临时变量req4.
| 归档时间: |
|
| 查看次数: |
1985 次 |
| 最近记录: |