C2143具有嵌套模板类

时间:2011-05-26 08:37:39

标签: c++ templates nested-class

您好,我有一些疑问重新分级模板。 请查看以下片段。

template<class T_Type1>
class CSmall
{
public:  
  class Const_Itr
  {
    T_Type1  Outer_A;
  };
private:
  T_Type1  Inner_A;
};

template<class T_Type>
class CBig
{
public:
  CSmall<T_Type>::Const_Itr*            obj1;//ERROR C2143: syntax error : missing ';' before '*'
  typename CSmall<T_Type>::Const_Itr*   obj2;// NO error after using 'typename' keyword
}; // CIPPortExpectationHandler

void main()
{
  CSmall<int>::Const_Itr*   obj3;// NO error even if 'typename' keyword in NOT used.
}

有人可以解释我

  1. 为什么声明'obj1'会出错。
  2. typename在声明'obj2'时如何解决此问题。编译器获得了什么信息
  3. 为什么在main()中声明'obj3'没有typename。
  4. 注意:在VC ++ 8.0上编译了代码片段

    先谢谢

2 个答案:

答案 0 :(得分:3)

请参阅此常见问题解答:What is the template typename keyword used for?

答案 1 :(得分:1)

编译器不知道CSmall<T_Type>::Const_Itr是类型还是变量。所以你应该提供一些帮助。虽然CSmall<int>::Const_Itr显然是一种类型。