2016-05-05 23 views
0

しかし、私は建設業者などconst_iteratorのを持って、私はC++は、クラスのコンストラクタは、int型の戻り値の型

error: non-template type ‘const_iterator’ used as a template 
In function ‘int const_iterator()’: 
error: only constructors take base initializers 
warning: no return statement in function returning non-void 

のコンパイラエラーを得続けると機能である鋳型と思います。

取り除か他のものと

関連するコード:

.hファイル:

template <class T> 
class test { 

    public: 

     // Forward declaration 
     class const_iterator; 


     template <class Y> 
     class const_iterator{ 
      public: 
       template<class A> friend class test; 

       // Default constructor 
       const_iterator(); 
      private: 
       Y* current; 
     }; 
}; 

.cppファイル:あなたが.cppファイルにテンプレートメソッドを定義することはできません

// Default constructor 
template <class T> 
test<T>::const_iterator<T>::const_iterator() : m_current(NULL){ } 

答えて

0

それらを実際に使用したい場合は、実装をヘッダーファイルに移動して単純にしてください。

2

テンプレートクラスを宣言する場合は、テンプレート部分を含める必要があります。 const_iteratorのための前方宣言は前方宣言を修正したが、あなたはまた、コンストラクタの定義に問題がある

template <class Y> 
class const_iterator; 

// now you can use const_iterator as an incomplete type 

ようになりますことをやって。 testconst_iteratorは両方ともテンプレートなので、コンストラクタを定義するときは2つのテンプレートが必要です。それぞれに1つずつ。また、あなたはの.hと.cppのファイル間でテンプレートクラスを分離しているとして、別の問題を持ってしようとしている

template <class T> // for test 
template <class Y> // for const_iterator 
test<T>::const_iterator<Y>::const_iterator() : current(nullptr){ } 

のようにそれは見えます。あなたはテンプレートでそれをすることはできません。その件について詳しくは、 Why can templates only be implemented in the header file?

関連する問題