介绍
void read_foo (std::ifstream& out);
void write_foo (std::ofstream& out);
我有这两个函数,一个用于读取文件,另一个用于写入文件。
下面的代码片段是有效的:
std::ifstream ifs ("filename.txt");
read_foo (ifs);
std::ofstream ofs ("filename.txt");
write_foo (ofs);
问题
然而,如果我尝试使用std::fstream
,以便可以使用相同的流调用两个函数,它不会编译,并且编译器会输出很多错误消息。
- 为什么我不能将
fstream
绑定到ifstream&
或ofstream&
上?
foo.cpp
#include <fstream>
void read_foo (std::ifstream& out);
void write_foo (std::ofstream& out);
int main () {
std::fstream fs ("filename.txt");
read_foo (fs);
write_foo (fs);
}
错误:
foo.cpp:在函数‘int main()’中:
foo.cpp:9:16: 错误:无效的初始化类型引用‘std::ifstream& {aka std::basic_ifstream<char>&}’,从表达式类型 ‘std::fstream {aka std::basic_fstream<char>}’ read_foo (fs);
^
foo.cpp:3:7: 注意:正在传递参数 1 给‘void read_foo(std::ifstream&)’ void read_foo (std::ifstream& out);
foo.cpp:10:16: 错误:无效的初始化类型引用‘std::ofstream& {aka std::basic_ofstream<char>&}’,从表达式类型 ‘std::fstream {aka std::basic_fstream<char>}’
write_foo (fs);
^
foo.cpp:4:6: 注意:正在传递参数 1 给‘void write_foo(std::ofstream&)’ void write_foo (std::ofstream& out);