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[],但没有任何改变。

我无法理解要我执行的错误消息。

currcontainer* 而不是 container。如果你想在容器上使用 [] 那么你必须做 (*curr)[Loc:left].

此外,在您的代码中 curr 未初始化。我认为这只是因为它是一个例子,你的真实代码分配了一些东西给 loc.