error: need ‘typename’ before ‘std::vector<T>::iterator’ because ‘std::vector<T>’ is a dependent scope
示例代码:
template <typename T, typename U> class Iterator { public: typedef std::vector<T>::iterator iter_type; Iterator(U *data, bool reverse = false):data_all(data) { m_it = data_all->m_data.begin(); } private: U *data_all; iter_type m_it; };
其中高亮typedef行编译会报错如下:
./Iter.h:6:13: error: need ‘typename’ before ‘std::vector<T>::iterator’ because ‘std::vector<T>’ is a dependent scope 6 | typedef std::vector<T>::iterator iter_type; | ^~~ | typename
需要将高亮行加上typename以示意编译器后面为一个类型名:
typedef typename std::vector<T>::iterator iter_type;
原因可见:https://cplusplus.com/forum/beginner/103508/#msg557627
https://en.cppreference.com/w/cpp/language/dependent_name