2012-03-01 22 views
1

可能性の重複:G ++ 4.6を使用して
Where and why do I have to put the “template” and “typename” keywords?それはのbasic_string <> ::イテレータをテンプレートすることは可能ですか?

イムと私は使用char型に基づいて私のクラスをテンプレートしようとしましたが、私の変数は、文字だけでなく、の文字列のみをアレントそれらの文字。だから私はこのような何か試してみました:

template<typename T> 
class Node 
//... 
//constructor 
Node(std::basic_string<T> str, std::basic_string<T>::iterator it) 
{ 
} 
//usage 
Node<char16_t> start; 

を私は 取得 'のstd ::のbasic_string < _CharT、STD :: char_traits < _CharT>、のstd ::アロケータ< _Tp1>> ::イテレータは' タイプではありません私はそれがコンパイルchar16_tするコンストラクタ引数のリストの2番目のTを交換

+1

これを、typename std :: basic_string :: iterator it'にします。 – ildjarn

答えて

6

はなぜあなたのコンストラクタもFSDNodeと呼ばれていませんか?それはテンプレートPARAMTER Tに依存するため

std::basic_string<T>::iteratorは、依存タイプです。したがって、引数型にtypenameを追加する必要があります。

FSDNode(std::basic_string<T> str, typename std::basic_string<T>::iterator it) 
{ 
} 
+0

だけの貼り付け時にコードを一般化されました...病気の修正タイプミス – NoSenseEtAl

関連する問題