我正在制作树状类,并希望支持操作数类型为枚举类的 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’)”
我还尝试在 Tree 类之外声明 operator[],但没有任何改变。
我无法理解要我执行的错误消息。
最佳答案
curr
是一个 container*
而不是 container
。如果你想在容器上使用 []
,那么你必须执行 (*curr)[Loc:left]
。
此外,在您的代码中 curr
未初始化。我认为这只是因为它是一个示例,您的真实代码将某些内容分配给 loc
。
关于c++ - operator[] 重载的内部类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57684804/