模板中使用typedef时报错error C2242
发布网友
发布时间:2022-10-15 20:22
我来回答
共3个回答
热心网友
时间:2023-10-11 17:06
在模板的语法中,对名称的规定非常苛刻。
受限名:使用了“::”的名称
受控名:使用了模板形参(T)的名称
模板语法规定,同时受限又受控的名称,不能表示“类型”,除非在其前面加关键字“typename”
楼主想让编译器将名称:
std::deque<TObj*>::iterator
识别为类型,就按上面说的办。
热心网友
时间:2023-10-11 17:06
typedef class std::deque<TObj*>::iterator ObjItr;
改成
typedef typename std::deque<TObj*>::iterator ObjItr;
明确std::deque<TObj*>::iterator为一个类型名称。
----
找了一下,这里有和LZ一模一样的问题,和我想的一样:http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/1926cae0-ea29-46c2-88c1-cde13e4d958b。
====
[原创回答团]
参考资料:原创+Google
热心网友
时间:2023-10-11 17:07
是 typedef class std::deque<TObj*>::iterator ObjItr;错了
错误提示不能将ObjItr放在class/struct/union后面