2013-04-13 99 views
0

我試圖創建一個方法,返回一個istream。問題是我不能得到一個空的參考傳遞給填充的方法。創建一個空的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; 
      } 

林傳遞是從主,因爲否則它似乎變得德引用。 什麼是使一個方法返回一個istream或一個指向istream的指針的正確(最佳實踐)方法主要在那裏被解析。

回答

0

它總是好的做法,當他們宣佈

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

初始化參考對象,如果你不初始化參照物這是一個錯誤。

+0

應該有一個&符號嗎? –

+0

流對象表示數據流的句柄。 iostream不能被分配或複製。它必須是一個參考。 &符號是必需的。 – shivakumar

0

您需要在聲明它們時初始化引用。重寫你的代碼如下:

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(...) { 
     //... 
    } 
} 
相關問題