- 締切済み
フレンドクラスにできない
mediatorクラスからCOuterクラスのメンバ変数にアクセスできるようにフレンドクラスにしたつもりなんですが、 うまくアクセスができずコンパイルエラーになってしまいます。 どこが悪いのか分からず困っています。 どなたか助けていただけませんか? mediator.h ----------------------------------------------------- template <class T> class mediator { public: mediator(T* p=NULL) : m_p(p) {} void SetOutClass(T*p) { m_p = pT;} T& GetOutClass() const { return *m_p;} private: T* m_p; }; #define outer GetOutClass() ----------------------------------------------------- COuter.h ----------------------------------------------------- class COuter { private: int m_a; public: void func() { class CInner : public mediator<COuter> { public: CInner(COuter *p) : mediator<COuter>(p) {} void func() { // フレンドクラスなのにアクセスできない!? outer.m_a = 1; } }; CInner inner(this); inner.func(); } friend class mediator<COuter>; }; -----------------------------------------------------
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- winterofmeei
- ベストアンサー率22% (20/88)
mediatorクラスではなく、CInnerクラスからアクセスしているように見えるのですが、friendは派生クラスでも有効なのでしょうか? private:のメンバは派生クラスからさえアクセスできないのですが……
お礼
ご回答ありがとうございます。 >mediatorクラスではなく、CInnerクラスからアクセスしているように見えるのですが、friendは派生クラスでも有効なのでしょうか? COuterクラスのフレンド関数であるmediatorクラスのメンバ変数m_pを取得して、そこからCOuterのprivateなメンバ変数m_aにアクセスしているつもりなんですが。 どうすればうまくいくでしょうか?