问题:
模板类继承模板类时,子类无法直接访问父类成员,会报如下错误:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C3861 “insertAsLast”: 找不到标识符 DSA D:\Code\DSA\DSA\Queue.h 8
环境:
- Visual Studio 2019
解决:
在子类访问父类时加上父类的前缀或者使用 this 调用。
问题分析:
对于各种类的继承分析:
- 非模板类 继承 非模板类:直接声明成员
- 模板类 继承 非模板类:在模板声明进行解析的时候就会进行查找
- 模板类/非模板类 继承 模板类 :进行名称二次查找
名称二次查找:
- 模板定义阶段:刚被定义时,只有模板中独立的名字(可以理解为和模板参数无关的名字)参加查找 。
- 模板实例化阶段:实例化模板代码时,非独立的名字才参加查找。
注:一个模板子类其实是不能在实例化之前就知道他的模板父类到底是谁,所以只能this->了
引用:
1. https://www.zhihu.com/question/28139230
2. https://bbs.csdn.net/topics/391862079
3. https://blog.csdn.net/u012175089/article/details/54231791
4. https://blog.csdn.net/sb985/article/details/79670881