[英]error in file handling in c++--no matching function for call to `std::basic_fstream<char, std::char_traits<char> >::open(const char[8], bool)'
[英]C++ error in cygwin; no matching function for call to 'std::basic_fstream…'
我在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标头时,错误更改为“致命错误: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;
}
任何帮助将非常感激! 这是我在这里的第一篇文章,因此,如果我有任何虚假行为,请告诉我。
看来您需要#include <string>
:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
...
string
include是由某些编译器自动添加的,但看来这不是其中之一。
它从编译器中清楚地表明: no known conversion for argument 1 from 'std::string {aka std::basic_string<char>}' to 'const char*
'
所以你必须使用c string
而不是std::string
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.