cygwin中的C ++错误;没有匹配函数来调用' std :: basic_fstream ...'

时间:2017-06-26 02:51:12

标签: c++ c++11

我在Windows 10上使用cygwin。当我尝试运行一个非常简单的程序时,显示从文件到命令提示符的行,我收到此错误:

$ c++ -c test.cpp
test.cpp: In function ‘int main()’:
test.cpp:9:31: error: no matching function for call to ‘std::basic_fstream<char>::open(std::string&, const openmode&)’
myfile.open(filename, ios::in);
                             ^
In file included from test.cpp:2:0:
/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/include/c++/fstream:1001:7: note: candidate: void std::basic_fstream<_CharT, _Traits>::open(const char*, std::ios_base::openmode) [with _CharT = char; _Traits = std::char_traits<char>; std::ios_base::openmode = std::_Ios_Openmode]
   open(const char* __s,
   ^
/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/include/c++/fstream:1001:7: note:   no known conversion for argument 1 from ‘std::string {aka std::basic_string<char>}’ to ‘const char*’

我认为这是本地安装问题,但我在第二台计算机上安装了cygwin,同样的事情发生了。我不知所措。

旁注;当我包含ifstream标头时,错误更改为&#34;致命错误:ifstream:没有这样的文件或目录。

这是我的代码:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    string filename="names.txt";
    fstream myfile;
    myfile.open(filename, ios::in);
    string firstname, lastname, id;
    for (int i = 0; i < 1; ++i)
    {
            myfile >> firstname >> lastname >> id;
            cout << firstname << " " << lastname << id <<endl;
    }
    return 0;
}

任何帮助将不胜感激!这是我在这里的第一篇文章,所以如果我犯了任何失礼,请告诉我。

2 个答案:

答案 0 :(得分:0)

看起来你需要`r`n

#include <string>

某些编译器会自动添加#include <iostream> #include <fstream> #include <string> using namespace std; ... include,但看起来这不是其中之一。

答案 1 :(得分:0)

它从编译器中清楚地说明:no known conversion for argument 1 from ‘std::string {aka std::basic_string<char>}’ to ‘const char*'

所以你必须使用c string而不是std::string