2012-05-04 9 views
2

私はテンプレートクラス内にテンプレートクラスを持っています。私は簡単にインラインでメンバ関数を実装することができますが、私の具体的なケースでは宣言後の問題を実行しているので宣言の後に実装する必要があります。入れ子のテンプレート関数の実装

この小さな例では、私の質問は答えられる(定義をインラインで移動せずに)コンパイルさせることができる場合は、次の

#include <iostream> 

template <typename T, typename V> 
struct Outer { 

    template <int Count> 
    struct Inner { 
     void printer() const; 
    }; 

}; 

template <typename T, typename V, int Count> 
inline void Outer<T, V>::Inner<Count>::printer() const { 
    std::cout << "Oh hai. I'm inner<" << Count << ">" << std::endl; 
} 

int main() { 
    Outer<int, int>::Inner<3> i; 

    i.printer(); 

    return 0; 
} 

編集:答えは、より明確に支援する(スチュアートが修正無関係の誤字を修正しました。 )

+0

カウンタ→カウント – qdii

答えて

2

以下は、g ++ 4.2.1で私のためにコンパイルされ、動作します。 (a)一貫してOuterのスペルを指定する、(b)テンプレートパラメータの2つのセットを分離する、そして(c)CounterCountに変更することです。

#include <iostream> 

template <typename T, typename V> 
struct Outer { 

    template <int Count> 
    struct Inner { 
     void printer() const; 
    }; 

}; 

template <typename T, typename V> 
template <int Count> 
void Outer<T, V>::Inner<Count>::printer() const { 
    std::cout << "Oh hai. I'm inner<" << Count << ">" << std::endl; 
} 

int main() { 
    Outer<int, int>::Inner<3> i; 

    i.printer(); 

    return 0; 
} 
+1

よろしくお願い致します。それらのタイプミスについてはごめんね。(意図的にコンパイルしないコードを作るときに気づくのは少し難しいです) – Heptic

+0

probsは、私が助けることができてうれしいです:) –

関連する問題