• ベストアンサー

派生クラスで,基本クラスのメンバ変数である構造体の型を・・・

派生クラスで,基本クラスのメンバ変数である構造体の型を戻り値の型とするメンバ関数を作りたいのですがエラーが発生してしまいます. class A{ protected: struct NODE{ char *name; NODE *next; } NODE *node; }; class B : public A{ public: NODE* sort(NODE* fnode); }; NODE* B::sort(NODE* fnode){ ←エラー ~~~~~ return ○○; } 現在このような状態です. よろしくお願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

その位置では NODE という型が宣言されていないからエラーになっているんじゃないですか? とりあえず A::NODE にすればエラーにはならないはずです. ちょっと気になるんですが, A::NODE を protected にしてますよね. それを返す関数を B では public で宣言してますけど, これは構成としてまずいと思いますよ. A (とその派生クラス) の外からは A::NODE が見えないような気がします.

Vei
質問者

補足

A::NODEとしてみたら,その行に対して error C2248: 'A::NODE' : protected struct (クラス 'A' で宣言されている)にアクセスできません。 と出てきました。。 どうしたらいいんでしょうか。。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

1つ試してもらいたいのですが, class B における sort の宣言を public ではなく protected にしたらどうなりますか? これでもその行でエラーが出るなら, それは単にコンパイラのバグです. そうでないなら, ちょっと厳しいとは思うけどコンパイラの親切心かもしれない. 基底クラス A で protected な構造体を派生クラスB で public な関数が返しても, もらった方が困りそう.

  • unsigned
  • ベストアンサー率13% (5/38)
回答No.2

private、protected、publicの違いは理解してますか? NODE構造体はprotectedですから、publicにしないと戻り値としては 使えないでしょうね。

関連するQ&A