2016-09-09 43 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.