一个VC6的代码 ,转成VS2003的时候,碰到下面的语句编译出错,VC6下没问题。

 

template <class Type> class CN3TableBase
{
public:
CN3TableBase();
virtual ~CN3TableBase();

C4346: “std::map::iterator	” : 依赖名称不是类型  棋牌技术  第1张

protected:
...

typedef std::map<unsigned int, Type>::iterator it_Table;
typedef std::map<unsigned int, Type>::value_type val_Table;
typedef std::pair<it_Table, bool> pair_Table;
};

 

改为:

C4346: “std::map::iterator	” : 依赖名称不是类型  棋牌技术  第2张

typedef typename std::map<unsigned int, Type>::iterator it_Table;
typedef typename std::map<unsigned int, Type>::value_type val_Table;
typedef typename std::pair<it_Table, bool> pair_Table;

就解决了

 

原因:可能编译器不清楚map的iterator是否是个类型 需要通过typename告诉编译器 这是个类型

未经允许不得转载! 作者:棋牌源码网,转载或复制请以超链接形式并注明出处棋牌源码网

原文地址:《C4346: “std::map::iterator” : 依赖名称不是类型》发布于:2021-08-06