[已解决] C++自定义Map迭代器无法识别RBT::TreeNode的问题
模板类嵌套内部类型的编译识别问题解决
问题场景
从零实现红黑树(RedBlackTree,简称RBT)后,基于它开发有序Map。RBT类内部包含TreeNode结构体,Map类里又定义了Iterator类。在Iterator中声明RBT<KeyType, ValueType, Compare>::TreeNode*类型指针时,编译器完全识别不了这个TreeNode类型。
尝试过的无效方案
- 对TreeNode做前向声明
- 将Map和Iterator声明为RBT的友元类
解决方法
在RBT的模板实例化前加上typename关键字,修正后的声明代码如下:
typename RBT<KeyType, ValueType, Compare>::TreeNode* node_ptr;
原理说明
在模板上下文里,编译器没办法自动判断RBT<KeyType, ValueType, Compare>::TreeNode到底是一个类型,还是类的静态成员变量。typename关键字的作用就是明确告知编译器:这里的名称是一个类型,让编译器正确解析这个嵌套类型。
内容的提问来源于stack exchange,提问作者Mario
相关产品推荐
相关产品推荐

