4

私は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_Openmode」への無効な変換<br>エラー2:「std :: basic_filebuf <_CharT、_Traits> * std :: basic_filebuf <_CharT、_Traits> :: open( const char *、std :: _ Ios_Openmode)[with _CharT = char、_Traits = std :: char_traits]'<p>

Google検索からわかる限り、g++は実際にここでC++標準を破っています。それらは一般的に非常に厳密に規格に準拠しているので、私は非常に驚くべきことだと思います。これは本当ですか?または私は何か間違ったことをしていますか?

標準の私のリファレンス:http ://www.cplusplus.com/reference/iostream/ofstream/open/

4

3 に答える 3

4

openmodeは正しいタイプであり、open_modeではありません。

于 2010-06-03T20:08:38.777 に答える
2

g ++は完全に準拠しているわけではありませんが、ここでのエラーの理由ではありません。

モードのタイプは次のようになります

std::ios_base::openmode

それ以外の

std::ios_base::open_mode

後者は古い、非推奨のAPIです。それはまだC++標準のAnnexDで指定されているので、コンパイラはそれをサポートする必要があります。

于 2010-06-03T20:09:36.407 に答える
2

これ:

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;

)。

于 2010-06-03T20:07:57.170 に答える