我正在编写一个程序,当我尝试使用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。如果有人有任何想法,将不胜感激。谢谢。
答案 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);