1

プログラムに取り組んでいますが、Cygwinでコンパイルしようとすると、奇妙なコンパイラエラーが発生します。このプログラムは、Visual Studio C ++ Expressで正常にコンパイルおよび実行されるため、Cygwinと関係があるようです。すべてのエラーは同じタイプのようです。コードの例を次に示します。

int count_records(void)
{
EMPL_TYPE empl_rec;
fstream empl_infile;
empl_infile.open(filepath, ios::in|ios::binary);
int count = 0;
empl_infile.read((char *) &empl_rec, sizeof(empl_rec));
while (!empl_infile.eof())
{
    count++;

    empl_infile.read((char *) &empl_rec, sizeof(empl_rec));
}
empl_infile.close();
cout << "Records Counted: " << count << endl;
return count;
}

そして、ここにそのセクションに関連するエラーがあります:

Assignment2.cpp:関数int count_records()': Assignment2.cpp:34: error: no matching function for call tostd :: basic_fstream> :: open(const std :: string&、std :: _ Ios_Openmode)'/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/fstream: 819:注:候補は次のとおりです:void std :: basic_fstream <_CharT、_Traits> :: open(const char *、std :: _ Ios_Openmode)[with _CharT = char、_Traits = std :: char_traits]

繰り返しになりますが、Visual Studioでコンパイルするときにこのエラーは発生せず、Cygwinでのみ発生します。誰かアイデアがあれば教えてください。ありがとうございました。

4

2 に答える 2

3

驚くべきことに、ファイルストリームのopen()メソッドは、C ++ 11標準がリリースされるまで、Cスタイルの文字列のみを使用していました。openステートメントをempl_infile.open(filepath.c_str(), ios::in|ios::binary);(filepathの呼び出しに注意してください.c_str())に置き換えるか、Cygwinのコンパイル行に-std = c++11を追加します。

于 2013-02-25T17:42:01.650 に答える
2

CygwinではなくVSでC++11をサポートしている可能性があります。このfstream::openメソッドは、const char*C++03の最初のパラメーターとしてを取ります。C ++ 11は、をとるオーバーロードを提供しますconst std::string&

このように修正できます

mpl_infile.open(filepath.c_str(), ios::in|ios::binary);
于 2013-02-25T17:43:43.627 に答える