1

ファイルの読み書きの構文とニュアンスを学んでいます。これが私の問題です。コードがユーザー フラグ (write_outfile = true) に基づいてファイルに書き込む場合、最後にファイルを閉じようとすると、「未定義の識別子」エラーが発生します。

ただし、同じ「if」ステートメント内でファイルを開いてから閉じると、問題はありません。

面倒なコード スニペットを次に示します。

#include <iostream>
#include <fstream>

int main()
  bool write_outfile = true;

  if (write_outfile)
  {
    ofstream outfile;
    outfile.open("output_test.txt");
    outfile << "This is my first text file written from C++.\n";
  }

// Do some other stuff here

  if (write_outfile)
  {
        outfile.close();
  }
4

2 に答える 2

3

ofstream outfile最も外側のスコープで宣言します。それ以外の場合は、最初の if ステートメントでのみ定義されます。あれは:

#include <iostream>
#include <fstream>

int main() {
  bool write_outfile = true;
  ofstream outfile;

  if (write_outfile)
  {
    outfile.open("output_test.txt");
    outfile << "This is my first text file written from C++.\n";
  }

// Do some other stuff here

  if (write_outfile)
  {
        outfile.close();
  }

}

于 2013-03-19T00:24:37.240 に答える
1

ステートメントのブロックはif、新しいスコープを導入します。outfileそのスコープで作成し、次の時点で破棄されます}。ブロックoutfileの外側で定義するだけです:if

bool write_outfile = true;

ofstream outfile;
if (write_outfile)
{
  outfile.open("output_test.txt");
  outfile << "This is my first text file written from C++.\n";
}
// ...
于 2013-03-19T00:25:04.243 に答える