gpt4 book ai didi

C++ 变量可见范围和流

转载 作者:行者123 更新时间:2023-11-28 01:48:40 26 4
gpt4 key购买 nike

我是 C++ 的新手,无法理解某些行为。在下面有功能,在这种情况下它有效。

bool Network::doRequest(HTTPRequest& request, string path, string content) {
HTTPResponse response;
istream* respStreamPtr;
session->sendRequest(request);
respStreamPtr = &session->receiveResponse(response);
if (response.getStatus() == HTTPResponse::HTTP_UNAUTHORIZED)
{
credentials->authenticate(request, response);
session->sendRequest(request);
respStreamPtr = &session->receiveResponse(response);
}
if (response.get("Content-Encoding") == "deflate") {
Poco::InflatingInputStream inflater(*respStreamPtr);
respStreamPtr = &std::istream(inflater.rdbuf());
Logger::dumpStream(*respStreamPtr);
}
return true;
}

但是如果将字符串 Logger::dumpStream(*respStreamPtr); 移出 if block 。像这样:

  if (response.get("Content-Encoding") == "deflate") {
Poco::InflatingInputStream inflater(*respStreamPtr);
respStreamPtr = &std::istream(inflater.rdbuf());
}
Logger::dumpStream(*respStreamPtr);

停止工作了!!!条件 (response.get("Content-Encoding") == "deflate") 始终为真;因此,在 block 中可见性流内容会遇到麻烦。但我不明白我做错了什么。请帮助我。

附言在这两种情况下都不异常(exception)。在第二种情况下,文件 somefile.txt 中没有数据。在第一种情况下,文件 somefile.txt 从 http 请求中夸大了数据。

void Logger::dumpStream(std::istream& inputStream) {  
fstream outStream("somefile.txt", ios_base::trunc | ios_base::out | ios_base::binary);
outStream << inputStream.rdbuf();
outStream.close();
}

最佳答案

我不熟悉您正在使用的类,但问题很可能是 Poco::InflatingInputStream inflater 超出了范围。

在 if 语句中:

if (response.get("Content-Encoding") == "deflate") {
Poco::InflatingInputStream inflater(*respStreamPtr);
respStreamPtr = &std::istream(inflater.rdbuf());
}

respStreamPtr 指向一个流,该流使用来自您的 inflater 对象的缓冲区。一旦 if 语句关闭,该缓冲区就不再有效,因此您不能在外部使用您的 respStreamPtr

关于C++ 变量可见范围和流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43858882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com