内部类operator []重载不起作用

时间:2019-08-28 03:49:43

标签: c++ operator-overloading inner-classes

我正在制作类似树的类,并希望支持其操作数类型为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 [],但没有任何改变。

我不明白我要做什么错误消息。

1 个答案:

答案 0 :(得分:4)

currcontainer*而不是container。如果要在容器上使用[],则必须执行(*curr)[Loc:left]

此外,您的代码中curr未初始化。我认为这只是因为它是一个示例,您的真实代码为loc分配了一些内容。