【发布时间】:2023-06-27 17:55:01
【问题描述】:
我正在使用 g++ 编译一些代码。我写了以下sn-p:
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_Openmode”的无效转换
错误 2:初始化 'std::basic_filebuf<_chart _traits>* std::basic_filebuf<_chart _traits>::open(const char*, std::_Ios_Openmode) 的参数 2 [with _CharT = char, _Traits = std: :char_traits]'
据我在 Google 搜索中得知,g++ 实际上在这里打破了 C++ 标准。我觉得这很令人惊讶,因为它们通常非常严格地符合标准。是这样吗?还是我做错了什么。
我的标准参考:http://www.cplusplus.com/reference/iostream/ofstream/open/
【问题讨论】:
-
除了更正类型名称外,还应使用
Name.c_str()而不是Name.data(),因为std::string::data() 不返回以null 结尾的字符数组。
标签: c++ standards-compliance ofstream