zl程序教程

您现在的位置是:首页 >  其他

当前栏目

error: need ‘typename’ before ‘std::vector<T>::iterator’ because ‘std::vector<T>’ is a dependent scope

2023-04-18 15:52:43 时间

示例代码:

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