2011-12-08 17 views
0

私は、private構造体 "myNode"を含むテンプレートクラス "myTree"を構築しています。私はmyNode *を返すことを望むプライベート関数 "findNode"も持っています。しかし、私が "findNode"を試して定義すると、 "myNode"と "*"の間にセミコロンがないという最初のエラーから生じると思われる5つのエラーが発生しています。ここで戻り値の型として構造体を使用する際の問題

は、基本的なコードです:

template <size_t N, typename ElemType> 
class myTree { 
public: 
    //... 
private: 
    struct myNode{ 
    //... 
    }; 
    myNode* findNode(const otherClass<N>& key); 
}; 

template <size_t N, typename ElemType> 
myNode* myTree<N, ElemType>::findNode(const otherClass<N>& key) { 
    return 0; 
} 

私はvoidへ戻り値の型を変更しようと、エラーが消え、私は私が私の構造体を使用しています方法に問題があることを前提と意味します。

エラーは次のとおりです。 1)構文エラー: ';'がありません。前に '*' 2)欠落している型指定子 - intが想定 3) 'N' 宣言されていない識別子 4) 'ElemType' 宣言されていない識別子 5) 'N' 宣言されていない識別子

これらの関数宣言ラインへのすべてのポイント( myNode * myTree :: findNode(const otherClass &キー){)。

myNode* findNode(const otherClass<N>& key); 

答えて

4

後のあなたはセミコロンが必要

+0

ありがとうございました:)私はmyNode *を修飾する必要のないパラメータの中で、void戻り値の型が "myNode *"の別のメソッドについてなぜ教えてください。関数の宣言は次の通りです: 'template void myTree :: freeChildren(myNode * current){...' –

+0

メンバ関数の引数が解析されるとき、関数が解析されることは明らかです関数がどのクラスに属しているかを示します。したがって、戻り値のみを修飾する必要がありますが、引数は修飾しないでください。 – thiton

+0

ああ、私は、クール感謝再び^を参照してください。 –

2

MYNODEは内部クラスで、戻り値の型で修飾する必要があります

template <size_t N, typename ElemType> 
typename myTree<N,ElemType>::myNode* 
myTree<N, ElemType>::findNode(const otherClass<N>& key) 
+0

おっとは、実際のコードでは、それを入力するのを忘れたことがありました。編集、ありがとうlol –

関連する問題