2012-03-21 18 views
0
#include <list> 

template < class TYPE > 
class CIndex : protected std::list <TYPE> 
{ 
public: 
    typedef std::list <TYPE>::iterator CIndexIt; 
    typedef std::list <TYPE>::difference_type CIndexDiff; 

上記のコードの最後の行でエラーが発生します。テンプレートの場合:エラーC4430:型指定子がありません - intが仮定されています。注:C++はdefault-intをサポートしていません

私はthisthe msdn pageを見ましたが、両方とも私のエラーを解決しません。

問題を引き起こしている可能性のあることは誰でも知っていますか?

編集:だから私

#include<hash_map> 
class CWItems 
{ 
typedef stdext::hash_map < unsigned long, CWksItem* > CItem; 
CItem mItems; 

:最初のリンクのソリューションは、仕事がtypenameを追加すると、上記のコードのために働いていたがために、それは以下のコードでは動作しませんでしたしていなかった
理由私はどこにでもtypenameを追加して間違ったことをしていると思った。このコードでtypedefこのエラーの原因となった後typenameを使用して:

error C2899: typename cannot be used outside a template declaration 

typenameなければ、示されたエラーはCItem mItems;行で、error C4430: missing type specifier - int assumed. Note: C++ does not support default-intあります。あなたがにリンクされている

+0

[テンプレート引数で定義された型を使用する](http://stackoverflow.com/questions/741597/using-types-defined-in-template-arguments) –

+0

あなたが投稿したリンクを持つと便利です。私の問題はまだ解決されていません。詳細を追加するために私の質問を編集しました。助けて? – Nav

+0

'CWItems'はクラステンプレートではないので、従属名は使用できません。 'CWksItem'はどこで宣言されていますか? –

答えて

2

あなたがstd::list<TYPE>::iteratorstd::list<TYPE>::difference_typeは依存名があるので、typenameキーワードを追加する必要があります。

typedef typename std::list <TYPE>::iterator CIndexIt; 
typedef typename std::list <TYPE>::difference_type CIndexDiff; 

参照してください。詳細についてはhttp://pages.cs.wisc.edu/~driscoll/typename.htmlをご覧ください。

+0

問題はコードの別の部分に現れ、今回は 'typename'で解決できませんでした。私は私の質問の編集セクションでさらに言及しました。助けて? – Nav

1

あなたは正確に問題になっているようtypenameキーワードが含まれていない:

typedef typename std::list <TYPE>::iterator CIndexIt; 
typedef typename std::list <TYPE>::difference_type CIndexDiff; 
関連する問題