0

我试图创建一个返回 istream 的方法。问题是我无法获得一个空引用来传递给填充方法。

在我的主要:

std::istream &is;//<-Initialized
is = NetPoco::getJson(is,"URL");
std::stringstream ss;
StreamCopier::copyStream(is,ss);
printf(ss.str().c_str());

在我的 getJson() 中:

    istream& NetPoco::getJson(istream& is,string url){
    try
     {
           ....
           istream &is = session.receiveResponse(res);
           return is;
          }

我从 main 传递了 is,否则它似乎得到了 de 引用。什么是使方法返回 istream 或指向 istream 的指针的正确(最佳实践)方法,以便在那里解析。

4

2 回答 2

2

您需要在声明引用时对其进行初始化。重写你的代码如下:

int main() {
    std::istream &is = NetPoco::getJson("URL");
    std::stringstream ss;
    StreamCopier::copyStream(is,ss);
    std::cout << ss.str();
}

//Removed `istream& is` parameter. It is not needed
std::istream& NetPoco::getJson(string url){
    try {
        //...
        std::istream &is = session.receiveResponse(res);
        return is;
    }
    catch(...) {
        //...
    }
}
于 2013-04-13T06:45:43.150 回答
0

在声明引用对象时初始化它们始终是一个好习惯

std::istream &is = NetPoco::getJson(is,"URL");

如果你不初始化引用对象,那是一个错误。

于 2013-04-13T06:23:39.003 回答