【问题标题】:No viable overloaded operator[] for custom class自定义类没有可行的重载运算符 []
【发布时间】:2016-02-15 18:13:55
【问题描述】:

我已经编写了 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&lt;pair&lt;int, int&gt;&gt;'"。如何解决?

【问题讨论】:

  • 你用什么编译器?
  • 不要从标准容器继承。而是使用合成。
  • 问题是(*this)[pos.first]看起来像递归调用,但参数错误。
  • @Valentin,Xcode 7.1,但问题也出现在其他编译器上。

标签: c++ class vector


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 2017-05-03
    相关资源
    最近更新 更多