c – 与模板混合的类成员的继承

c – 与模板混合的类成员的继承,第1张

概述在下面的代码中,为什么T2给出了这个错误’m_t’没有在这个范围内声明,而TB是好的? 如何在仍然使用模板的情况下访问T2中的T1成员? // All goodclass TA{ public: TA() {} protected: int m_t;};class TB : public TA{ public: TB() {} 在下面的代码中,为什么T2给出了这个错误’m_t’没有在这个范围内声明,而TB是好的?

如何在仍然使用模板的情况下访问T2中的T1成员?

// All goodclass TA{    public:      TA() {}    protected:    int m_t;};class TB : public TA{    public:      TB() {}      int get()      { return m_t; }    protected:};// Error in T2template<typename T>class T1{    public:      T1() {}    protected:    int m_t;};template<typename T>class T2 : public T1<T>{    public:      T2() {}      int get()      { return m_t; }    protected:};
解决方法 您需要使用this-> m_t使其成为从属名称.编译模板时,会分两个阶段查找名称.当编译器首先解析模板时,将查找非依赖名称.在实例化模板时查找从属名称.将其更改为this-> m_t会延迟查找,直到实际实例化get函数为止,在这种情况下,基类类型是已知的,编译器可以验证成员的存在. 总结

以上是内存溢出为你收集整理的c – 与模板混合的类成员的继承全部内容,希望文章能够帮你解决c – 与模板混合的类成员的继承所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1215043.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存