Привет У меня есть некоторые сомнения по поводу пересмотра шаблонов.Пожалуйста, посмотрите следующий фрагмент.
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.
}
Может ли кто-нибудь объяснить мне следующее
- Почему объявление 'obj1' дает ошибку.
- Как typename решает эту проблемупри объявлении «obj2».какую информацию получает компилятор
- Почему объявление 'obj3' внутри main () работает без typename.
Примечание: фрагмент кода выполняется на VC ++ 8.0
Спасибозаранее