我正在尝试制作一个程序,用户在该程序中输入文件名,然后程序尝试将其打开并检查是否已打开.我正在使用getline函数.到目前为止,这是我的代码:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
void readGameFile();
int main()
{
readGameFile();
return 0;
}
void readGameFile()
{
ifstream infile;
string s;
string fileName;
getline(cin,fileName);
infile.open(fileName);
if(infile.is_open())
{
cout << "It worked!"<<endl;
}
else
{
cout << "You messed up"<<endl;
}
}
它给了我这个错误:
23:22:错误:没有匹配的函数可以调用“ std :: basic_ifstream :: open(std :: string&)”
23:22:注意:候选人是:
/usr/include / c /4.6/fstream:531:7:注意:void std :: basic_ifstream< _CharT,_Traits> :: open(const char *,std :: ios_base :: openmode)[with _CharT = char,_Traits = std :: char_traits,std :: ios_base :: openmode = std :: __ Ios_Openmode]
/usr/include / c /4.6/fstream:531:7:注意:参数1的已知转换没有从“ std :: string {aka std :: basic_string}”转换为“ const char *”
因此,我不确定是什么问题.我对编程还很陌生,我想为一个班级项目弄清楚这一点(这不是作业,这只是到目前为止我在项目中遇到的问题的通用版本).如果您可以提供任何帮助,那将是很好的.谢谢!
解决方法:
open
有两个重载:
void open( const char *filename, ios_base::openmode mode = ios_base::in );
void open( const std::string &filename, ios_base::openmode mode = ios_base::in );
第二个仅在C 11之后可用.您显然不是在C 11模式下编译,或者在使用过期的编译器.还有另一个重载为const char *的重载,因此无论如何它都应该起作用:
infile.open(fileName.c_str());