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没有命名类型吗?
答案 0 :(得分:1)
无作用域的枚举(即enum
而不是enum struct/class
)没有自己的范围。因此,在Node
中指定的值Attributes
与类定义Node
在同一范围内。这种歧义导致您的编译错误。如果将enum
替换为enum struct
或enum class
,则值Node
将位于Attributes
命名空间中,因此不会发生冲突。