プロが教える店舗&オフィスのセキュリティ対策術

派生クラスで,基本クラスのメンバ変数である構造体の型を戻り値の型とするメンバ関数を作りたいのですがエラーが発生してしまいます.

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 ○○;
}

現在このような状態です.
よろしくお願いします.

A 回答 (3件)

その位置では NODE という型が宣言されていないからエラーになっているんじゃないですか? とりあえず A::NODE にすればエラーにはならないはずです.


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

この回答への補足

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

補足日時:2007/12/21 03:43
    • good
    • 0

1つ試してもらいたいのですが, class B における sort の宣言を public ではなく protected にしたらどうなりますか?


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

private、protected、publicの違いは理解してますか?


NODE構造体はprotectedですから、publicにしないと戻り値としては
使えないでしょうね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!