【问题标题】:Inner class of operator[] overloading doesn't work内部类 operator[] 重载不起作用
【发布时间】:2023-04-02 15:25:01
【问题描述】:

我正在制作树状类,并希望支持操作数类型为枚举类的 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’)”

我也尝试在树外声明 operator[],但没有任何改变。

我无法理解错误信息要我做什么。

【问题讨论】:

  • 我建议重新考虑这一点。 [] 的含义不明显,当人们滥用操作符时会导致错误。
  • 阅读错误消息的关键是密切关注所涉及的类型。第一种是Tree::container*,不是Tree::container,所以不能调用Tree::container方法。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多