はありません、
class B
がmethodA()
にローカルクラスで法的ではありません。
class B
は、囲み関数の非静的な「自動」ローカル変数にアクセスできません。しかし、それは囲みスコープから静的変数にアクセスすることができます。
ローカルクラスがアクセスできるものにはいくつかの制限があります。ここ
は、C++標準からの参照である:
9.8ローカルクラス宣言は[class.local]
- クラスは、関数定義内で定義することができます。そのようなクラスはローカルクラスと呼ばれます。ローカルクラスの名前は、その囲みスコープに対してローカルです。ローカルクラスは囲みスコープのスコープ内にあり、囲み関数と同じように関数外の名前へのアクセスも同じです。ローカルクラスの宣言では、型名、静的変数、extern変数と関数、および囲みスコープの列挙子のみを使用できます。
[例:
int x;
void f()
{
static int s ;
int x;
extern int g();
struct local {
int g() { return x; } // error: x is auto
int h() { return s; } // OK
int k() { return ::x; } // OK
int l() { return g(); } // OK
};
// ...
}
local* p = 0; // error: local not in scope
末端例]
2囲み機能は、ローカル・クラスのメンバーへの特別なアクセス権を持っていません。通常のアクセス規則に従います(第11節)。ローカルクラスのメンバ関数は、それらがまったく定義されていれば、クラス定義内に定義されなければならない。
3.クラスXがローカルクラスである場合、ネストされたクラスYはクラスXで宣言され、後でクラスXの定義で定義されるか、後でクラスXの定義と同じスコープで定義されます。ローカルクラス内にネストされたクラスはローカルクラスです。
4.ローカルクラスには静的データメンバーが含まれていてはなりません。
よくお試しになりませんか? –
http://www.comeaucomputing.com/tryitout/ "9行目:エラー:内包する関数のローカル変数への参照が許可されていません" –
実際、遠隔地にいる私はこのm/cにコンパイラを持っていません: – user844631