C++实现BST时头文件嵌套struct node在实现文件访问报错问题
问题原因说明
这是C++的名称查找规则决定的,核心差异是BST::insert成员函数不同代码位置的作用域判定逻辑不同:
- 函数签名的返回值类型写在
BST::insert限定符之前,此时编译器还未进入BST类的作用域,只会在全局作用域查找node类型,自然找不到定义在BST内部的node,所以必须手动加BST::前缀指定所属作用域。 - 写完
BST::insert限定符之后,后续的所有内容(包括参数列表、函数体内部)都会被编译器判定为已进入BST类的作用域,此时查找名称会优先在BST类内部搜索:- 参数列表里的
node* t不需要加BST::也能被正确识别,就是这个规则的体现 - 函数体内部的
new node同理,处于BST类作用域下的代码可以直接找到类内定义的node结构体,不需要额外加作用域前缀。
- 参数列表里的
如果你使用C++11及以上版本,还可以用后置返回类型的写法简化代码:auto BST::insert(int x, node* t) -> node*,后置返回类型位于BST::insert限定符之后,已经进入类作用域,不需要加BST::前缀也能识别node类型。
内容的提问来源于stack exchange,提问作者banna
相关产品推荐
相关产品推荐

