尝试在infile.open()中使用字符串变量被视为c中的char

我正在尝试制作一个程序,用户在该程序中输入文件名,然后程序尝试将其打开并检查是否已打开.我正在使用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());
上一篇:PTA(Basic Level)1033.旧键盘打字


下一篇:把字符串中的每个空格替换为“%20”