2016-09-09 79 views
3

我需要我的程序,請執行下列操作之一:如何寫入/讀取到未知的輸入/輸出在C++流

  1. 從標準輸入讀取和寫入標準輸出從給定的文件中讀取
  2. 和寫入另一個給定文件

工作方式僅在運行時確定。

這是我試過

void runProgram(std::istream programIStream, std::ostream programOStream) 
{ 
    int x; 
    programIStream >> x; // Reading from program input stream 

    programOStream << "Writing to program output stream" << std::endl; 
} 


int main(int argc, char* argv[]) 
{ 
    if(argc == 3) 
    { 
     std::ifstream ifs; 
     ifs.open(argv[1], std::ios::in); 
     std::ofstream ofs; 
     ofs.open(argv[2], std::ios::out); 
     runProgram(ifs, ofs); 
    } 
    else 
    { 
     runProgram(std::cin, std::cout); 
    } 

    return 0; 
} 

我認爲繼承是會照顧的,但是這是行不通的。

什麼是正確的方法來做我所需要的?

+3

你需要按引用傳遞:'無效runProgram(的std :: istream的&programIStream,性病:: ostream的和programOStream)' – NathanOliver

+0

搜索:對象切片。 – Rakete1111

+0

@NathanOliver,這解決了它。謝謝 – Jona

回答

3

要真正做到這一點,你必須像這樣(按引用傳遞):

void runProgram(std::istream& programIStream, std::ostream& programOStream) 
2

你傳入programIStreamprogramOStream的價值。 這是錯誤鐺編譯代碼時(作爲的std :: istream的)拋出:

error: call to deleted constructor of 'std::istream' (aka 'basic_istream<char>') 
... 
note: declared protected here 
    basic_istream(const basic_istream&) = delete; 

這個構造函數被調用a copy constructor。它被標記爲明確刪除,這意味着這種情況完全不應該發生。

Pass a reference of them instead.