有关使用C ++结构的问题

时间:2018-07-17 11:25:19

标签: c++

enum Attributes{ Branch, Node };

struct Node{
  Attributes att = Attributes::Node;

  char ch = '\0';

  unsigned int frequency = 0;

  Node* NextRightNode = nullptr;
  Node* NextLeftNode = nullptr;
};

const Node& operator=(Node& a, Node& b){
  if(b.att == Attributes::Node){
    a.att = Attributes::Node;
    a.ch = b.ch;
    a.frequency = b.frequency;

    a.NextLeftNode = nullptr;
    a.NextRightNode = nullptr;
  }else if(b.att == Attributes::Branch){
    a.att = Attributes::Branch;
    a.ch = '\0';
    a.frequency = 0;

    if(b.NextLeftNode != nullptr){
      *a.NextLeftNode = *b.NextLeftNode;
    }else{
      a.NextLeftNode = nullptr
        }

    if(b.NextRightNode != nullptr){
      *a.NextRightNode = *b.NextRightNode;
    }else{
      a.NextRightNode = nullptr
    }
  }

  return a;
}

我尝试使用g ++。exe编译此代码。 它显示了这个

fortry.cpp:14:7: error: 'Node' does not name a type
const Node& operator=(Node& a, Node& b){
      ^~~~

有人可以告诉我为什么说Node没有命名类型吗?

1 个答案:

答案 0 :(得分:1)

无作用域的枚举(即enum而不是enum struct/class)没有自己的范围。因此,在Node中指定的值Attributes与类定义Node在同一范围内。这种歧义导致您的编译错误。如果将enum替换为enum structenum class,则值Node将位于Attributes命名空间中,因此不会发生冲突。