以下のサンプルコードを参照してください。
class A
{
private:
class B
{
public:
foobar();
};
public:
foo();
bar();
};
クラスAおよびBの実装内:
A::foo()
{
//do something
}
A::bar()
{
//some code
foo();
//more code
}
A::B::foobar()
{
//some code
foo(); //<<compiler doesn't like this
}
コンパイラーは、メソッドfoobar()内のfoo()の呼び出しにフラグを立てます。以前、私はfoo()をクラスAのプライベートメンバー関数として持っていましたが、Bの関数がそれを見ることができないと仮定してpublicに変更しました。もちろん、それは役に立ちませんでした。Aの方法で提供される機能を再利用しようとしています。コンパイラがこの関数呼び出しを許可しないのはなぜですか?私が見るように、それらは同じ囲みクラス(A)の一部です。クラスをC++標準で囲むためのネストされたクラスmeebersのアクセシビリティの問題は解決されたと思いました。
BをA内にネストしたままにするBの同じメソッド(foo())を書き直さずに、私がやろうとしていることをどのように達成できますか?
VC ++コンパイラver-9(Visual Studio 2008)を使用しています。ご協力ありがとうございました。