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 风格的字符串,直到 C++11 标准出来。将您的 open 语句替换为empl_infile.open(filepath.c_str(), ios::in|ios::binary);(注意.c_str()对文件路径的调用)或将 -std=c++11 添加到 Cygwin 中的编译行。

于 2013-02-25T17:42:01.650 回答
2

可能是您在 VS 上支持 C++11,而不是在 Cygwin 上。该fstream::open方法const char*在 C++03 中将 a 作为第一个参数。C++11 提供了一个采用const std::string&.

你可以像这样修复它

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