我正在制作类似树的类,并希望支持其操作数类型为enum类的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')”
我还尝试在Tree类之外声明operator [],但没有任何改变。
我不明白我要做什么错误消息。
答案 0 :(得分:4)
curr
是container*
而不是container
。如果要在容器上使用[]
,则必须执行(*curr)[Loc:left]
。
此外,您的代码中curr
未初始化。我认为这只是因为它是一个示例,您的真实代码为loc
分配了一些内容。