自定义类没有可行的重载运算符 []
Posted
技术标签:
【中文标题】自定义类没有可行的重载运算符 []【英文标题】: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<pair<int, int>>'
"。如何解决?
【问题讨论】:
你用什么编译器? 不要从标准容器继承。而是使用合成。 问题是(*this)[pos.first]
看起来像递归调用,但参数错误。
@Valentin,Xcode 7.1,但问题也出现在其他编译器上。
【参考方案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];
;
【讨论】:
以上是关于自定义类没有可行的重载运算符 []的主要内容,如果未能解决你的问题,请参考以下文章