首页 >后端开发 >C++ >为什么 `ifstream::open(std::string)` 在旧 C 版本中失败?

为什么 `ifstream::open(std::string)` 在旧 C 版本中失败?

Susan Sarandon
Susan Sarandon原创
2024-12-10 03:17:10479浏览

Why Does `ifstream::open(std::string)` Fail in Older C   Versions?

没有匹配函数: ifstream::open(std::string)

在包含以下行的 C 代码中:

file.open(name);

常见错误是:

no matching function for call 'std::ifstream::open(std::string&)'

出现此问题是因为旧版本的 C(C 11 之前)不支持使用 std::string 参数打开文件。 open() 函数需要字符数组或 C 风格字符串。

解决方案

要解决此错误,可以使用以下方法之一:

  • 使用 c_str() 将 std::string 转换为 C 风格字符串方法:
file.open(name.c_str());
  • 利用 ifstream 类的构造函数,如下所示:
std::ifstream file(name.c_str());

这种方法无需单独构造和

此外,为了确保 loadNumbersFromFile() 函数不会修改其参数,建议通过引用常量 std::string 来传递:

std::vector<int> loadNumbersFromFile(const std::string& name)
{
    // ...
}

以上是为什么 `ifstream::open(std::string)` 在旧 C 版本中失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn