2017-03-24 24 views
2

可変のテンプレート引数を持つテンプレートクラスを作っています。しかし、メソッドを定義して呼び出すと、コンパイラーはそのメソッドが定義されていないと言います。C++でテンプレートクラスのメソッドを定義する

template <class T, class... Args> 
class Params { 
private: 
    vector<void*> params; 
    int n; 

    void initializeParam(T a, Args... args) { 
     params[n] = (void*)&a; 
     n++; 
     initializeParam(args...); 
    } 

    void initializeParam() {} 

public: 
    Params(T a, Args... args) : params(vector<void*>(sizeof...(Args))) { 
     n = 0; 
     initializeParam(a, args...); // Compiler -> initializeParam is not defined 
    } 
}; 
+3

用テンプレート引数からクラスのテンプレート引数を区切るために持っている[MCVE]を投稿してください。 –

+3

エラーが発生した場合は、最も関連性の高い部品も同様に投稿してください。 –

+0

void *を使用する理由 –

答えて

2

template <typename U, typename ... As> 
void initializeParam(U a, As... args) { 
    params[n++] = (void*)&a; 
    initializeParam(args...); 
} 

あなたの現在のinitializeParams()を次のようにメインinitializeParams()を書き換えてみコンストラクタから呼び出されるが、それ自体を呼び出そうとは、再帰的に正しい引数を持つinitializeParams()がないときです。

だから、initializeParams()

関連する問題