BruceEckelによるThinkinginC ++は参考書ではないことは知っていますが、奇妙な段落を見つけたので、それが今日でも適用できるかどうかわかりません。
構造をネストしても、プライベートメンバーへのアクセスが自動的に許可されるわけではありません。これを実現するには、特定の形式に従う必要があります。最初に、ネストされた構造を(定義せずに)宣言し、次にそれをフレンドとして宣言し、最後に構造を定義します。構造体の定義は、フレンド宣言とは別にする必要があります。そうしないと、コンパイラーによって非メンバーと見なされます。
ネストされた構造をフレンドとして宣言せずに実際にこれを試しましたが、機能しました。
struct myStruct{
private:
int bar;
public:
struct nestedStruct{
void foo(myStruct *);
}a;
};
void myStruct::nestedStruct::foo(myStruct * p){
p->bar = 20;
}
基本クラスのプライベートメンバーを変更するために、ネストされた構造体のフレンドを宣言する必要がありますか?