【问题标题】:Getting fstream errors when compiling with Cygwin使用 Cygwin 编译时出现 fstream 错误
【发布时间】:2013-02-10 22:49:20
【问题描述】:

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

【问题讨论】:

    标签: c++ cygwin fstream


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      你可以这样修复它

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-19
        • 1970-01-01
        • 2013-06-16
        • 2013-10-28
        相关资源
        最近更新 更多