C++: 'identifier': identifier not found [Compiler Error C3861]

问题:

模板类继承模板类时,子类无法直接访问父类成员,会报如下错误:

严重性	代码	说明	                   项目   文件	                  行 禁止显示状态
错误	C3861	“insertAsLast”: 找不到标识符 DSA   D:\Code\DSA\DSA\Queue.h  8	

环境:

  1. Visual Studio 2019

解决:

在子类访问父类时加上父类的前缀或者使用 this 调用。

 

问题分析:

对于各种类的继承分析:

  1. 非模板类            继承 非模板类:直接声明成员
  2. 模板类                继承 非模板类:在模板声明进行解析的时候就会进行查找
  3. 模板类/非模板类 继承 模板类   :进行名称二次查找

名称二次查找:

  1. 模板定义阶段:刚被定义时,只有模板中独立的名字(可以理解为和模板参数无关的名字)参加查找 。
  2. 模板实例化阶段:实例化模板代码时,非独立的名字才参加查找。

注:一个模板子类其实是不能在实例化之前就知道他的模板父类到底是谁,所以只能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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值