如何在c ++中写入/读取未知的输入/输出流

时间:2016-09-09 15:45:36

标签: c++ stream

我需要我的程序执行以下操作之一:

  1. 从标准输入读取并写入标准输出
  2. 从给定文件中读取并写入另一个给定文件
  3. 工作方式仅在运行时确定。

    这就是我试过的

    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;
    }
    

    我认为继承会处理所有事情,但这不起作用。

    做我需要的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

要实际执行此操作,您必须执行以下操作(通过引用传递):

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

答案 1 :(得分: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.