使用Cygwin编译时出现fstream错误

问题描述:

我正在编写程序,并且在尝试使用Cygwin编译时遇到一些奇怪的编译器错误。该程序使用Visual Studio C++ Express进行编译和运行,所以它似乎与Cygwin有关。所有的错误似乎都是相同的类型。下面是代码的例子:使用Cygwin编译时出现fstream错误

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的> ::开放(常量的std :: string & ,std :: _ Ios_Openmode)' /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/fstream:819:note:candidates are:void std :: basic_fstream < _CharT,_Traits> ::打开(const char *,std :: _ Ios_Openmode)[与_CharT = char,_Traits = std :: char_traits]

同样,我不会收到此错误时co使用Visual Studio进行制作,仅限于Cygwin。如果任何人有任何想法,将不胜感激。谢谢。

令人惊讶的是,文件流的open()方法只取得C风格的字符串,直到C++ 11标准出来。将empl_infile.open(filepath.c_str(), ios::in|ios::binary);(请注意在filepath上调用.c_str())或将-std = C++ 11替换为Cygwin中的编译行。

+0

大,谢谢! – 2013-02-25 17:59:47

这可能是因为你在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); 
+1

感谢您的回答!我希望我可以批准这两个答案... – 2013-02-25 18:00:46