2012-03-21 114 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但都没有解决我的错误。

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

编辑:
的原因,第一个链接的解决方案没有奏效,是因为虽然加入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;线。

+0

[使用模板参数中定义的类型]可能的重复(http://stackoverflow.com/questions/741597/using-types-defined-in-template-arguments) – 2012-03-21 08:40:12

+0

有用的链接你张贴。我的问题仍然没有解决。已编辑我的问题以添加更多信息。帮帮我? – Nav 2012-03-21 09:10:32

+0

'CWItems'不是一个类模板,所以你不能有任何依赖名称。 “CWksItem”在哪里申报? – 2012-03-21 09:46:53

回答

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欲了解更多信息。

+0

这个问题出现在代码的另一部分,这次'typename'没有解决它。我在我的问题的编辑部分提到了更多。帮帮我? – Nav 2012-03-21 09:03:43

1

你缺少typename关键字完全一样的问题,你链接到:

typedef typename std::list <TYPE>::iterator CIndexIt; 
typedef typename std::list <TYPE>::difference_type CIndexDiff; 
相关问题