c – 与模板混合的类成员的继承
发布时间:2020-12-16 09:44:43 所属栏目:百科 来源:网络整理
导读:在下面的代码中,为什么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
在下面的代码中,为什么T2给出了这个错误’m_t’没有在这个范围内声明,而TB是好的?
如何在仍然使用模板的情况下访问T2中的T1成员? // All good class TA { public: TA() {} protected: int m_t; }; class TB : public TA { public: TB() {} int get() { return m_t; } protected: }; // Error in T2 template<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函数为止,在这种情况下,基类类型是已知的,编译器可以验证成员的存在.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |