1

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);と、コンパイルエラーが発生します。どうしてこれなの?

4

3 に答える 3

4

C ++ 98のファイルストリームは、コンストラクター引数にCスタイルの文字列のみを使用します。C++文字列は使用しません。これは、C++11アップデートで修正されたC++98標準の見落としです。コンパイラがまだ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 に答える