自制矢量模板operator []错误

时间:2015-04-20 15:15:37

标签: c++ vector operator-overloading

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

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

我在类复制构造函数

中使用此代码
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)'

我尝试使用operator[]关键字

重载const
const T& operator[](unsigned int);

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

这可能是什么原因?

2 个答案:

答案 0 :(得分:7)

您必须像const那样实施operator[]版本:

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

答案 1 :(得分:5)

原因正是您所说的:没有const超载,因此您无法将[]应用于const向量。

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

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