operator[] 重载的内部 class 不起作用
Inner class of operator[] overloading doesn't work
我在做树状class,想支持操作数类型为枚举class的operator[]。
我将 operator[] 与枚举 class 一起使用的目的是访问节点的子节点(
即 node[Loc::left] - 表示节点的左子节点)
我的节点 class 是树状 class 的内部 class,我认为这会在下面造成一些问题。
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
}
}
}
错误消息是 "no match for ‘operator[]’ (operand types are ‘Tree::container*’ and ‘Tree::Loc’)"
我也尝试在 class 树中声明 operator[],但没有任何改变。
我无法理解要我执行的错误消息。
curr
是 container*
而不是 container
。如果你想在容器上使用 []
那么你必须做 (*curr)[Loc:left]
.
此外,在您的代码中 curr
未初始化。我认为这只是因为它是一个例子,你的真实代码分配了一些东西给 loc
.
我在做树状class,想支持操作数类型为枚举class的operator[]。
我将 operator[] 与枚举 class 一起使用的目的是访问节点的子节点( 即 node[Loc::left] - 表示节点的左子节点) 我的节点 class 是树状 class 的内部 class,我认为这会在下面造成一些问题。
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
}
}
}
错误消息是 "no match for ‘operator[]’ (operand types are ‘Tree::container*’ and ‘Tree::Loc’)"
我也尝试在 class 树中声明 operator[],但没有任何改变。
我无法理解要我执行的错误消息。
curr
是 container*
而不是 container
。如果你想在容器上使用 []
那么你必须做 (*curr)[Loc:left]
.
此外,在您的代码中 curr
未初始化。我认为这只是因为它是一个例子,你的真实代码分配了一些东西给 loc
.