c++ - 字符串作为文件名

标签 c++ codeblocks

如果我将字符串设置为文件名,它不起作用,我也不知道为什么。 (我正在使用 codeblocks,它似乎适用于其他 IDE)

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
   string FileName="Test.txt";
   ofstream File;
   File.open(FileName);
}

这行不通,而下一个行:

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
   ofstream File;
   File.open("Test.txt");
}

错误信息:

no matching function for call to std::basic_ofstream::open(std::string&)

谁能帮我解决这个问题,我不明白为什么会出现这个错误。

最佳答案

由于在C++标准化早期应该算是一个历史事故,C++文件流最初不支持std::string作为文件名参数,只支持char指针。

这就是为什么像 File.open(FileName) 这样的东西,FileName 是一个 std::string,没有工作并且有写成 File.open(FileName.c_str())

File.open("Test.txt") 始终有效,因为通常的数组转换规则允许将 "Test.txt" 数组视为指向其第一个元素的指针。

C++11 通过添加 std::string overloads 修复了 File.open(FileName) 问题.

如果您的编译器不支持 C++11,那么也许您应该换一个更新的编译器。或者它可能确实支持 C++11,您只需使用 -std=c++11 之类的标志打开支持。

关于c++ - 字符串作为文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48284348/

相关文章:

c++ - 用户重复下单价格不累积

C++ Vector的不同形式及应用

c++ - 如何定义一个lambda函数来捕获类的 'this'指针?

c++ - 错误 : declaration of C function conflicts with previous declaration

c++ - 将字符串存储到二维数组中

c++ - 您究竟如何通过函数的参数传递数组?

c++ - 使用 Visual C++ 开发人员工具运行的代码块

c++ - 如何调查启动应用程序时发生的访问冲突的来源?

c++ - 无法在代码块中使用图形编程

c++ - 结构数组中所有相似字段的总和