【发布时间】:2023-04-02 15:25:01
【问题描述】:
我正在制作树状类,并希望支持操作数类型为枚举类的 operator[]。
我在枚举类中使用 operator[] 的目的是访问节点的子节点( 即 node[Loc::left] - 表示节点的左子节点) 我的节点类是树状类的内部类,我认为这会在下面产生一些问题。
class Tree{
enum class Loc : uint8_t {left =0 , right = 1};
class container{
public:
container *parent, *left, *right;
container(){
this[Loc::left] = NULL; //this works...
}
container* operator[](Loc loc);
const container* operator[](Loc loc) const;
}
container* operator[](Loc loc){
return this->left;
}
const container* operator[](Loc loc) const{
return this->left;
}
...
void doSomething(){
container *curr;
if(curr[Loc::left] == NULL){ //this doesn't work
}
}
}
错误消息是“与‘operator[]’不匹配(操作数类型为‘Tree::container*’和‘Tree::Loc’)”
我也尝试在树外声明 operator[],但没有任何改变。
我无法理解错误信息要我做什么。
【问题讨论】:
-
我建议重新考虑这一点。
[]的含义不明显,当人们滥用操作符时会导致错误。 -
阅读错误消息的关键是密切关注所涉及的类型。第一种是
Tree::container*,不是Tree::container,所以不能调用Tree::container方法。
标签: c++ operator-overloading inner-classes