自制矢量模板运算符[]错误

selfmade vector template operator[] error

我制作了自己的矢量模板,operator[]其中的一部分:

template <class T>
T& vector<T>::operator[](unsigned int index)
{
    return m_Data[index];
}

我在class复制构造函数

中使用这段代码
Track::Track(const Track& src)
{
    for(unsigned int i = 0; i < src.sorted.size(); i++)
        AddCar(src.sorted[i]->rz, src.sorted[i]->owners.back()->name, src.sorted[i]->owners.back()->surname);
}

我收到一个错误 'no match for operator[] (operands types are const vector<Track*> and unsigned int)'

我试图用 const 关键字重载 operator[]

const T& operator[](unsigned int);

但这给了我一个不同的错误:const T& operator[](unsigned int); cannot be overloaded

这可能是什么原因?

您必须像这样实现 operator[]const 版本:

template <class T>
const T& vector<T>::operator[](unsigned int index) const
{
    return m_Data[index];
}

原因正是你所说的:没有 const 重载,所以你不能将 [] 应用于 const 向量。

你没有说你尝试了什么或错误是什么,但这应该有效:

T const & operator[](unsigned int index) const {return m_Data[index];}    
T       & operator[](unsigned int index)       {return m_Data[index];}