1

複数のファイルを入力として受け取るプログラムがあります。私がやろうとしているのは、同じファイルストリームを使用することですか? 2 番目のファイルでストリームを開こうとすると、エラーが発生し続けます。コードが有効ではなく、コンパイル時にエラーが発生するのはなぜですか? argv[2] は const char* です。

エラー: '(std::ifstream) (char*&)' の呼び出しに一致しません

ifstream fin(argv[1]);
  //work with filestream
fin.close();

fin(argv[2]);
  //work with filestream
fin.close();
4

2 に答える 2

5

最初の行ifstream fin(argv[1]);ifstreamのコンストラクターを呼び出しており、コンストラクターはオブジェクトごとに 1 回だけ呼び出すことができます。あなたのコードはそれをもう一度呼び出そうとしています。代わりにopen()を使用してみてください:

fin.open(argv[2]);

余談ですが、を再度開く前にclear()ifstreamを呼び出すこともできます。この理由は、最初の open() (または close() でさえも) が失敗した場合、エラー ビットifstreamが設定され、close() によってクリアされないためです。

于 2012-04-27T18:35:32.290 に答える
2

ローカル スコープを使用します。

{
  ifstream fin(argv[1]);
  //work with filestream
}

{

  ifstream fin(argv[2]);
  //work with filestream
}

ストリームを手動で閉じる必要はないことに注意してください。これは、ストリームが範囲外になると自動的に処理されます。

于 2012-04-27T18:40:25.537 に答える