字符串作为文件名

时间:2018-01-16 15:11:56

标签: c++ 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");
}

错误讯息:

  

没有匹配函数来调用std :: basic_ofstream :: open(std :: string&amp;)

有人可以帮助解决这个问题,我无法理解为什么会出现这种错误。

1 个答案:

答案 0 :(得分:6)

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

这就是File.open(FileName)FileNamestd::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这样的标志打开支持。