SIM*_*MEL 8 c++ ofstream visual-c++ implicit-conversion visual-studio-2019
我正在升级现有的旧代码以使用 VS 2019 *,在代码中我有以下函数在返回行失败:
int foo(const char *fn) const
{
ofstream out(fn,ios::binary);
if (out)
{
//...
}
return out!=0;
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
错误 C2678 二进制“!=”:未找到采用“std::ofstream”类型左侧操作数的运算符(或没有可接受的转换)
原始诗人的意图是什么,解决问题的最佳方法是什么?
*此代码在 VS 2010 上编译成功。
我想随着升级,您将切换到 C++11 模式。
在 C++11 之前,std::basic_ios( 的基类std::basic_ofstream)可以void*隐式转换为。
如果
fail()返回true,则返回空指针,否则返回非空指针。
然后out!=0检查流是否没有错误并准备好进行进一步的 I/O 操作。
从 C++11 开始,只有一个转换运算符可以转换std::basic_ios为bool. 请注意,运算符标记为explicit,因此不允许对 进行隐式转换out!=0。
您可以将代码更改为!!out(调用operator!)、或!out.fail()、或static_cast<bool>(out)(通过 显式转换operator bool)。