C++ 奇怪的错误:无法从';int';至';ios#U base::openmode';

C++ 奇怪的错误:无法从';int';至';ios#U base::openmode';,c++,standards-compliance,ofstream,C++,Standards Compliance,Ofstream,我正在使用g++编译一些代码。我写了以下片段: bool WriteAccess = true; string Name = "my_file.txt"; ofstream File; ios_base::open_mode Mode = std::ios_base::in | std::ios_base::binary; if(WriteAccess) Mode |= std::ios_base::out | std::ios_base::trunc; File.open(Name.dat

我正在使用g++编译一些代码。我写了以下片段:

bool WriteAccess = true;
string Name = "my_file.txt";
ofstream File;
ios_base::open_mode Mode = std::ios_base::in | std::ios_base::binary;
if(WriteAccess)
  Mode |= std::ios_base::out | std::ios_base::trunc;
File.open(Name.data(), Mode);
我收到这些错误。。。知道为什么吗

错误1:从“int”到“std::_Ios\u Openmode”的转换无效
错误2:初始化'std::basic\u filebuf*std::basic\u filebuf::open(const char*,std::_Ios\u Openmode)[带_CharT=char,_Traits=std::char\u Traits]的参数2'

从谷歌搜索中,我可以看出,G++实际上是打破C++标准的。这让我感到非常惊讶,因为它们通常都非常严格地符合标准。是这样吗?还是我做错了什么

我的标准参考:此:

ios_base::open_mode Mode = std::ios_base::in | std::ios_base::binary;
应该是:

std::ios_base::openmode Mode = std::ios_base::in | std::ios_base::binary;
注意
openmode
中缺少

(我必须添加这些行,并将代码放入函数中,以便编译代码段

#include <string>
#include <fstream>

using std::string;
using std::ofstream;
using std::ios_base;
#包括
#包括
使用std::string;
使用std::of流;
使用std::ios_base;

)

openmode是正确的类型,而不是打开模式

g++并不完全符合标准,但这不是这里出现错误的原因

模式的类型应为

std::ios_base::openmode
而不是

std::ios_base::open_mode

后者是一种过时的API。在C++标准的附录D中仍然规定,所以编译器仍然必须支持它。

除了纠正类型名之外,还应该使用<代码>名称> CyString()/Cube >代替<代码> No.Addio.>代码>,因为STD::String::DATA()不返回空终止字符数组。我调试了同一个问题超过2个小时。这纯粹是邪恶。几乎和定义真假一样邪恶。