我已经编写了std :: vector的自定义子类:
template <class T>
class CustVec : public vector<vector<T>> {
public:
T& operator [](const pair<int, int> pos) {
return (*this)[pos.first][pos.second];
}
};
但我发现错误No viable overloaded operator[] for type 'CustVec<pair<int, int>>'
&#34;。如何解决?
答案 0 :(得分:3)
您正在通过声明一个新运算符来隐藏基类operator[]
。像往常一样,它隐藏了外部范围内的相似名称。
您可以通过
显式导入名称再次使其可见using vector<vector<T>>::operator[];
也许将其放在私人部分,以便不公开访问
template <class T>
class CustVec : public vector<vector<T>> {
using vector<vector<T>>::operator[];
public:
T& operator [](const pair<int, int> pos) {
return (*this)[pos.first][pos.second];
}
};