我试过谷歌搜索,但我无法得出一个合适的答案.任何C大师都可以告诉我为什么C要求你用typename关键字声明OuterClass< T> :: Innerclass?
我是数据结构课程的助教,我一直看到这个错误.我知道要告诉我的学生他们需要将typename放在返回类型的前面,但我无法解释为什么这是必需的.
谢谢.
解决方法
那是因为模板中的两阶段名称查找.当编译器看到Innerclass时,它必须知道该名称是否是一个类型(例如,对于OuterClass的某些特化,可以是int类型的静态成员).所以它假设它不是类型名称,除非你这么说. typename必须在模板中使用,并且只能在依赖于模板参数的名称上使用. HTH
例:
template <class T> class X { typedef T XXX; }; template<> class X<char> { static int XXX; }; template<class T> class Y { // X<T>::XXX member; invalid XXX is not assumed to be a type! typename X<T>::XXX member; //we explicitly specify that XXX is a type; Later,upon instantiation,we will verify that };
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。