如果我将字符串设置为文件名,则它不起作用,我不知道为什么。 (我正在使用代码块,它似乎适用于其他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;)
有人可以帮助解决这个问题,我无法理解为什么会出现这种错误。
答案 0 :(得分:6)
由于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
这样的标志打开支持。