使用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中的编译行。
这可能是因为你在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);
感谢您的回答!我希望我可以批准这两个答案... – 2013-02-25 18:00:46
大,谢谢! – 2013-02-25 17:59:47