自定义类没有可行的重载运算符 []

No viable overloaded operator[] for custom class

本文关键字:重载 运算符 自定义      更新时间:2023-10-16

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

通过声明新运算符来隐藏基类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];
    }
};