2011-05-26 180 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顯然是一種類型。