加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C类型名称和内部类

发布时间:2020-12-16 05:01:10 所属栏目:百科 来源:网络整理
导读:我试过谷歌搜索,但我无法得出一个合适的答案.任何C大师都可以告诉我为什么C要求你用typename关键字声明OuterClass T :: Innerclass? 我是数据结构课程的助教,我一直看到这个错误.我知道要告诉我的学生他们需要将typename放在返回类型的前面,但我无法解释为
我试过谷歌搜索,但我无法得出一个合适的答案.任何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
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读