1

他の関数内で宣言された変数にアクセスする必要があります。

推定f1()

void f1()
{
  double a;
  int b;
  //some operations
}

f2()

void f2()
{
  //some operations
  //access a and b from f1()
}

C ++で可能ですか?どうすればそれができますか?

ここに示すように関数への参照を渡すことは、関数を呼び出す順序が崩れるため、私の場合には適切な答えではありません。グローバル変数の宣言も拒否されました。

4

4 に答える 4

7

C++ では、その関数のスコープ外でローカルに宣言された関数変数にアクセスする方法はありません。簡単に言えば、ここで求めているものは次のとおりです。

別の関数内で宣言された変数にアクセスする必要があります。

単純に不可能です。それを可能にしているように見えるものはすべて、未定義の動作です。

あなたができることは、「f1」と「f2」をクラスのメソッドとして、double aそしてint bメンバーデータの状態として置くことです:

class c1
{
  double a;
  int b;

public:
  void f1();
  void f2();
};

void c1::f1()
{
  // f1 can access a and b.
  //some operations
}

void c1::f2()
{
  // f2 can see the changes made to a and b by f1
}

これにより、2 つの要件が満たされます。すなわち:

  1. グローバル変数は使用されません。
  2. 問題のメソッドにパラメーター参照は渡されません。
于 2013-09-10T04:19:06.317 に答える
2

f2以外の場所からf1電話をかけたいようです。

void foo() { f1(); f2(); }

その場合: これらの変数f2は呼び出された時点では存在しないため、アクセスするものは何もありません。
(そして、あなたはスコープ生涯間違えています。それらは非常に異なるものです。)

できることの1 つは、変数を必要とするすべての関数への参照によって変数を渡すことです。

void f1(double& a, int& b);
void f2(double& a, int& b);

void foo()
{
    double x;
    int y;
    f1(x, y);
    f2(x, y);
}
于 2013-09-10T07:59:28.373 に答える