【发布时间】:2020-03-15 20:45:37
【问题描述】:
在运行这些代码时:
std::fstream f;
if(f.open("n",std::fstream::in)) //ERROR
收到的错误是:
无法将 'f.std::basic_fstream::open(((const char*)"n"), ((std::ios_base::openmode)std::ios_base::in))' 从 ' void' 到 'bool'
但是在使用 filebuf 对象运行相同的代码时,它运行良好:
std::filebuf f;
if(f.open("n",std::fstream::in)) //works fine
当fstream 和filebuf 对象都可以用来调用open 时,为什么会发生这种情况?
【问题讨论】:
-
fstream::open不返回任何内容。filebuf::open如果文件打开则返回this,否则返回 NULL。 -
它们的功能不同。
fstream有自己的open方法(在内部调用filebuf::open)并决定不返回任何内容。如果文件无法打开,它将反映在“流状态”中,您可以在open调用后通过if (f.fail())进行检查。 -
@0x499602D2 知道了,谢谢!!我对一个函数的返回方式不同感到困惑