error: dependent-name ` xxx' is parsed as a non-type, but instantiation yields a type
错误原因:
简言之,就是说你该用typename的地方没用typename,如以下代码
解决方法:
在使用时,xx前面添加typename
解析:
typedef typename std::vector
为什么使用typename关键字
那么问题来了,为什么要加上typename关键字?
typedef std::vector<T>::size_type size_type;//why not?• 1
实际上,模板类型在实例化之前,编译器并不知道vector<T>::size_type
是什么东西,事实上一共有三种可能:
静态数据成员 静态成员函数 嵌套类型
那么此时typename
的作用就在此时体现出来了——定义就不再模棱两可。
语句的真是面目是:typedef
创建了存在类型的别名,而typename
告诉编译器std::vector<T>::size_type
是一个类型而不是一个成员。