STL итератор с пользовательским шаблоном - PullRequest
4 голосов
/ 27 февраля 2009

у меня есть следующий метод шаблона,

template <class T>
void Class::setData( vector<T> data )
{    
    vector<T>::iterator it;
}

и я получаю следующую ошибку компиляции (XCode / gcc)

ошибка: ожидается `; ' до 'это'

Я нашел здесь кого-то еще с похожей проблемой (прочитайте, чтобы увидеть, что это то же самое, хотя и начинается с другой проблемы) , но, похоже, он решен путем обновления Visual Studio. Это заставляет меня догадываться, что это проблема компилятора и что она должна компилироваться, это правильно? Итерация с помощью индексации от 0 до размера работает, однако я не предпочел бы реализовать эту функцию. Есть ли другой способ обойти это? Спасибо

Ответы [ 3 ]

10 голосов
/ 27 февраля 2009

Классический случай использования ключевого слова typename. Надеюсь, что у вас есть #include -ed vector и iterator, и у вас есть using namespace std; где-то в области видимости. Использование:

typename vector<T>::iterator it;

Поиск зависимых имен. Начало здесь .

1 голос
/ 27 февраля 2009

Я думаю, вам не хватает typename:

#include <vector>
using namespace std;

class Class{
public:
    template <class T>
    void setData( vector<T> data ) {
        typename vector<T>::iterator it;
    }
};
0 голосов
/ 27 февраля 2009

Попробуйте:

template <class T>
void Class::setData( std::vector<T> data )
{    
    std::vector<T>::iterator it;
}

Только в том случае, если это пропущенный using оператор?

...