#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;
错误发生在上面代码的最后一行。
我见过this和the 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 :(得分:2)
您需要添加typename
关键字,因为std::list<TYPE>::iterator
和std::list<TYPE>::difference_type
是从属名称:
typedef typename std::list < TYPE >::iterator CIndexIt;
typedef typename std::list < TYPE >::difference_type CIndexDiff;
答案 1 :(得分:1)
您完全错过typename
关键字,与您链接到的问题完全相同:
typedef typename std::list < TYPE >::iterator CIndexIt;
typedef typename std::list < TYPE >::difference_type CIndexDiff;