c++ - operator[] 重载的内部类不起作用

标签 c++ operator-overloading inner-classes

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

相关文章:

c++ - 结构成员的运行时对齐

C++ 用重载的输出运算符替换 toString

c++ - 迭代器相等

python - i = i + n 真的和 i += n 一样吗?

Java 反射 : Get inner instantiated field

java - 匿名内部类的 ClassName 相同 - obj.getClass().getName()

java - 为什么我们不能以常规方式在外部类的主要方法中创建内部类的实例?

c++ - 使用 TinyXML 获取段错误

python - 在 python bindings/clang 中的 get-includes 中解析 cpp 文件时过滤目录

c++ - 我们可以超越对象切片吗?