как объявить шаблонный map :: iterator внутри шаблонного класса. следующий код говорит; ожидается при компиляции - PullRequest
2 голосов
/ 29 июля 2010

следующий код говорит ошибка: ожидается ‘;’ перед «форвитом» ошибка: ожидается ‘;’ до ‘revit’

template<class T>
class mapping {

public:
    map<T,int> forw;
    map<int,T> rev;
    int curr;
    //typeof(forw)::iterator temp;
    map<T,int>::iterator forwit;
    map<int,T>::iterator revit;
};

//    }; // JVC: This was present, but unmatched.

Я понятия не имею, в чем проблема? пожалуйста, помогите.

спасибо заранее

Ответы [ 3 ]

9 голосов
/ 29 июля 2010

Чтобы помочь компилятору понять, что вы говорите о типе в шаблонном контексте, вы должны помочь ему написать typename.

В вашем случае

typename map<T,int>::iterator forwit;
3 голосов
/ 29 июля 2010

Добавить typename:

typename map<T,int>::iterator forwit;
typename map<int,T>::iterator revit;

Поскольку map<T,int> зависит от параметра шаблона, неизвестно, пока не будет создан экземпляр шаблона, является ли iterator типом или статическим членом; если вы не используете typename для указания того, что это тип, компилятор примет последнее.

1 голос
/ 29 июля 2010

Вы должны указать компилятору map<T,int>::iterator - это тип по ключевому слову typename.

typename map<T,int>::iterator forwit;
...