C++ 答复未在此范围内声明
为什么这个代码不起作用C++ 答复未在此范围内声明,c++,scope,C++,Scope,为什么这个代码不起作用 void MainWindow::on_startButton_clicked() { QNetworkAccessManager *nam = new QNetworkAccessManager(this); QNetworkReply *red = nam->get(QNetworkRequest(QUrl("someurl/to/file"))); QObject::connect(red, SIGNAL(readyRead()), t
void MainWindow::on_startButton_clicked()
{
QNetworkAccessManager *nam = new QNetworkAccessManager(this);
QNetworkReply *red = nam->get(QNetworkRequest(QUrl("someurl/to/file")));
QObject::connect(red, SIGNAL(readyRead()), this, SLOT(readingReadyBytes()));
QObject::connect(red, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(updateDownloadProgress(qint64,qint64)));
}
void MainWindow::readingReadyBytes() {
QFile file("C:\\test.bin");
file.open(QIODevice::WriteOnly);
file.write(red->read(red->bytesAvailable()));
file.close();
}
QT抛出错误:此范围中未声明“red”
write(红色->读取(红色->字节可用());
^您应该声明
红色
为类成员,而不是在void main window::on_startButton_clicked
函数中,然后您可以在on_startButton_clicked
函数中为其赋值,因此:
声明红色
为类成员:
// in your MainWindow class
QNetworkReply *red;
在单击的开始按钮上的方法中为其赋值:
...
red = nam->get(QNetworkRequest(QUrl("someurl/to/file")));
...
因为红色
是单击的启动按钮()上的本地。
如果您试图下载并保存文件,则在创建文件并在每次调用readingReadyBytes()
时关闭文件时,代码将无法工作。
根据ABFORCE的建议,您应该宣布红色
为会员。
然后,您应该将QNetworkReply
的事件finished()
连接到关闭文件的插槽。可能是因为red
不是MainWindow的一个属性,也不是全局可访问的变量。@Kamil Klimek无需粗鲁。我有C++基础知识,但我对对象和类很陌生。我不是粗鲁的。我要指出的是,你缺乏基本的C++知识范围。