使用Cygwin编译时出现fstream错误

时间:2013-02-25 17:38:30

标签: c++ cygwin fstream

我正在编写一个程序,当我尝试使用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 to std :: basic_fstream&gt; :: open(const std :: string&amp;,std :: _ Ios_Openmode)' /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/fstream:819:注意:候选人是:void std :: basic_fstream&lt; _CharT,_Traits&gt; :: open(const char *,std: :_Ios_Openmode)[与_CharT = char,_Traits = std :: char_traits]

同样,在使用Visual Studio进行编译时,我没有遇到此错误,仅使用Cygwin。如果有人有任何想法,将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:3)

令人惊讶的是,文件流的open()方法只采用C风格的字符串,直到C ++ 11标准出现。用empl_infile.open(filepath.c_str(), ios::in|ios::binary);替换open语句(注意文件路径上的.c_str()调用)或将-std = c ++ 11添加到Cygwin的编译行。

答案 1 :(得分:2)

可能是你在VS上有C ++ 11支持,而不是在Cygwin上。 fstream::open方法将const char*作为C ++ 03中的第一个参数。 C ++ 11提供了一个带有const std::string&的重载。

您可以像这样修复

mpl_infile.open(filepath.c_str(), ios::in|ios::binary);