我需要我的程序执行以下操作之一:
工作方式仅在运行时确定。
这就是我试过的
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;
}
我认为继承会处理所有事情,但这不起作用。
做我需要的正确方法是什么?
答案 0 :(得分:3)
要实际执行此操作,您必须执行以下操作(通过引用传递):
void runProgram(std::istream& programIStream, std::ostream& programOStream)
答案 1 :(得分:2)
您按值传递programIStream
和programOStream
。
这是编译代码时抛出的错误(对于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。它被标记为明确删除,这意味着完全不应该发生这种情况。