2017-01-19 5 views
0

私はテンプレートクラスを持っているテンプレートポインタの初期化

template <class T> 
class MyTemplate 
{ 
public: 
    struct node 
    { 
     int a; 
    }; 
    MyClass(); 
    ~MyClass(); 
private: 
    static node* theNode; 
}; 

template <class T> 
MyClass::node* MyClass<T>::theNode = 0; 

しかしtheNodeの初期化が失敗した - 私は私が手

MyClass<T>node* MyClass<T>::theNode = 0; 

に宣言を変更した場合はクラステンプレートの 使用はテンプレート引数リスト が必要です

エラーC2143:構文エラー: ';'がありません。 before '*'

正しい構文が何であるか教えてください。

+4

は 'MyTemplate'は' MyClass'を言うことになっていますか? –

+1

すべてのタイプミス...それを修正してから使用してください: 'typename MyTemplate :: node * MyTemplate :: theNode = 0;' – P0W

答えて

6

ちょうどあなたの定義を変更:

template<class T> 
typename MyClass<T>::node* MyClass<T>::theNode = 0; 
+0

私の答えは時代遅れですか? – Bathsheba

+0

@Bathshebaしかし、私はダウン投票者ではありません – MRB

+2

それは残念です。恐ろしい答えを落とすことに何も問題はありません。これがメカニズムの仕組みです。 (私はこれをupvotedしました。) – Bathsheba