我当前正在尝试在向量上重载运算符[]
。我试图使该运算符在Matlab或Python中像负索引或大于向量长度的索引一样工作。我的问题不是得到正确的结果,而是实际重载运算符,因为我知道我将在重载代码中使用非重载的运算符。我需要用于特定类的向量,但是如果它适用于任何vector
,那就更好了。
现在我的代码是: 标头:
MyClass std::vector::operator[](std::vector<MyClass> const vector,int const idx) const;
来源:
Myclass vector::operator[](vector<MyClass> const vector,int const idx) const {
n=vector.size()
if((idx>=0) && (idx<n)){
return vector[idx];
}
else if(idx<0){
return vector[n+idx%n]
}
else{
return vector[idx%n]
}
}
我得到了错误:
error: 'template<class _Tp, class _Alloc> class std::vector' used without template parameters
error: non-member function 'MyClass operator[](std::vector<MyClass>, int)' cannot have cv-qualifier
error: 'MyClass operator[](std::vector<MyClass>, int)' must be a nonstatic member function
很抱歉,如果这个问题已经讨论过,但是我找不到... 预先非常感谢您的回答!
答案 0 :(得分:5)
您的错误与语法有关:
vector::operator[]
应该是
vector<MyClass>::operator[]
但是,您不能随意重新定义您不拥有的类的运算符。您可以做的是创建自己的MyVector
类,该类从vector
公开继承:
struct MyVector : std::vector<MyClass>
{
MyClass& operator[](std::size_t index)
{
// ...
}
};