1

我在使用ifstream未在编译时定义的文件名创建 a 时遇到问题。以下示例工作正常:

#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);编译错误。为什么是这样?

4

3 回答 3

4

C++98 中的文件流仅采用 C 样式字符串作为构造函数参数,而不采用 C++ 字符串,这是 C++98 标准中的一个疏忽,在 C++11 更新中得到了纠正。如果您的编译器还不支持 C++11,您可以通过简单地调用c_str()从 C++ 字符串中获取 C 样式字符指针来从字符串名称打开文件:

ifstream in(file.c_str());
于 2012-07-05T20:53:49.663 回答
3

在 c++11 之前,ifstream 构造函数只接受了一个 const char*不是文件名的字符串。

所以试试ifstream in(file.c_str());

于 2012-07-05T20:52:55.083 回答
2

您需要c_str方法:

ifstream in(file.c_str());
于 2012-07-05T20:53:07.690 回答