将字符串参数传递给 ifstream

Passing a string argument to ifstream

本文关键字:ifstream 参数传递 字符串      更新时间:2023-10-16

>我正在尝试将字符串参数从主函数传递给函数,然后将此收到的字符串参数传递给ifstream构造函数。我能够在函数中接收此字符串,但是当我将此参数传递给 ifstream 时,我收到一条错误消息:

调用"std::basic_ifstream::basic_ifstream(const string&("没有匹配函数 std::ifstream 文件(文件名(;

这是我的代码:

int** read_CSV(std::string const& fileName)
{
//cout<<fileName<<"n";//this works
std::ifstream file(fileName);//problem
//Rest of logic
}

主要功能:

int main()
{
int** inputMatrix1 = read_CSV("inputData4_80-20_100x32.csv");
return 0;
}

变量文件名正在产生问题。如果我按原样传递它,它会给出错误。但是,如果我使用字符串而不是变量明确提及文件名,则代码可以正常工作。有人可以解释一下这里的问题到底是什么以及我该如何解决吗?

好的,所以问题是我试图在没有 C++11 标准的情况下仅使用 g++ "NameOfFile.cpp"进行编译。评论部分有2种可能的解决方案,如下所示:

  1. 在给出编译命令时使用 -std=c++11。生成的编译命令如下所示:g++ -std=c++11 "NameOfFile.cpp"
  2. 正如 @Peter 所指出的,另一种解决方案是在字符串对象的末尾使用c_str(),因为 ifstream 不接受字符串作为 c++11 之前的参数,因此c_str()用于显式转换为兼容格式。

下面是第二个解决方案的修改代码行:std::ifstream file(fileName.c_str());

感谢@Peter和@Holt的投入。