だから私はこのサンプルコードを実行しています:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main() {
ifstream inFile;
string str;
cout << "\nEnter file name : ";
cin >> str;
try {
inFile.open(str);
if(!inFile)
throw exception();
} catch(exception e) {
cout <<"\nAn exception was caught. file does not exist. ";
return 1;
}
return 0;
}
そして、それは私にコンパイラエラーを与えました:
test.cpp:14:13: error: no viable conversion from 'string' (aka 'basic_string<char>') to 'const char *'
inFile.open(str);
^~~
/usr/include/c++/4.2.1/fstream:517:24: note: passing argument to parameter '__s' here
open(const char* __s, ios_base::openmode __mode = ios_base::in)
関数プロトタイプを調べました:
void open (const char* filename,
ios_base::openmode mode = ios_base::in | ios_base::out);
void open (const string& filename,
ios_base::openmode mode = ios_base::in | ios_base::out);
fstream::open() が const String/ const char* を期待するのはなぜですか? ファイル名はどこからでも (上記の例のようにユーザーから) 取得することができ、その場合は を作成str
してconst string
も役に立ちません。代わりに使用して動作させることができましたが、ファイルを開くメソッドでconststr.c_str()
ネスが強制されている理由を誰かが理解するのを手伝ってくれませんか? char* を使用したり、C スタイルの文字列に変換したりせずに、文字列をそのまま使用することを許可しないのはなぜですか?