自定义类没有可行的重载operator []

时间:2016-02-15 18:13:56

标签: c++ class vector

我已经编写了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;。如何解决?

1 个答案:

答案 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];
    }
};