【问题标题】:How to write/read to unknown input/output stream in c++ [closed]如何在 C++ 中写入/读取未知的输入/输出流 [关闭]
【发布时间】:2016-09-09 15:45:36
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您需要通过引用传递:void runProgram(std::istream&amp; programIStream, std::ostream&amp; programOStream)
  • 搜索:对象切片。
  • @NathanOliver,这解决了它。谢谢

标签: c++ stream


【解决方案1】:

要真正做到这一点,你必须这样做(通过引用传递):

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.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 2018-04-14
      • 2014-12-27
      • 2021-03-09
      • 2010-10-02
      • 2015-06-18
      • 1970-01-01
      相关资源
      最近更新 更多