对于模板:错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int

时间:2012-03-21 08:27:12

标签: c++

#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;

错误发生在上面代码的最后一行。

我见过thisthe msdn page,但两者都没有解决我的错误。

任何人都知道可能导致问题的原因是什么?

修改
第一个链接的解决方案不起作用的原因是因为虽然添加typename适用于上面的代码,但它不适用于以下代码:

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

所以我认为我通过在任何地方添加typename来做错事。在此代码中typename之后使用typedef会导致此错误:

error C2899: typename cannot be used outside a template declaration

如果没有typename,则显示的错误为error C4430: missing type specifier - int assumed. Note: C++ does not support default-int,位于CItem mItems;行。

2 个答案:

答案 0 :(得分:2)

您需要添加typename关键字,因为std::list<TYPE>::iteratorstd::list<TYPE>::difference_type是从属名称:

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

有关详细信息,请参阅http://pages.cs.wisc.edu/~driscoll/typename.html

答案 1 :(得分:1)

您完全错过typename关键字,与您链接到的问题完全相同:

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