2011-05-26 183 views
0

嗨我有一些怀疑regrading模板。 请查看follwoing片段。以下C2143与嵌套模板类

  1. 为什么 'OBJ1' 的声明给错误

    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. 
    } 
    

    有人可以给我解释一下。

  2. typename在声明'obj2'时如何解决这个问题。编译器获得什么信息
  3. 为什么在main()中声明'obj3'的工作没有typename。

注:摘录事先对符合VC++ 8.0

感谢

回答

1

编译器有没有线索,如果CSmall<T_Type>::Const_Itr是一种类型或一个变量。所以你应该提供一些帮助。而CSmall<int>::Const_Itr显然是一种类型。