我在创建带有文件名的ifstream
时遇到问题,该文件名未在编译时定义。以下示例正常工作:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
string file, word;
int count = 0;
cout << "Enter filename: ";
cin >> file;
ifstream in("thisFile.cpp");
while(in >> word)
count++;
cout << "That file has " << count << " whitespace delimited words." << endl;
}
但如果我将行ifstream in("thisFile.cpp");
更改为ifstream in(file);
,我会收到编译错误。这是为什么?
答案 0 :(得分:4)
C ++ 98中的文件流只为构造函数参数采用C风格的字符串,而不是C ++字符串,这是C ++ 98标准中的疏忽,在C ++ 11更新中得到了纠正。如果你的编译器还不支持C ++ 11,你可以通过调用c_str()
从字符串名称打开一个文件来从C ++字符串中获取C风格的字符指针:
ifstream in(file.c_str());
答案 1 :(得分:3)
在c ++ 11之前,ifstream构造函数只为const char*
取了一个字符串作为文件名。
所以请尝试ifstream in(file.c_str());
答案 2 :(得分:2)
您需要c_str方法:
ifstream in(file.c_str());