Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
konstantin314
Сообщений: n/a
#1

Итератор контейнера внутреннего класса шаблона - C++

30.06.2010, 12:53. Просмотров 862. Ответов 3
Метки нет (Все метки)

Следующий код компилируется:
C++
1
2
3
4
5
struct A {
    struct B {};
    vector<B> vec;
    vector<B>::iterator it;
};
А следующий код не компилируется, причем проблема возникает только с созданием итератора, но не контейнера (error: expected `;' before "it")
C++
1
2
3
4
5
template <class T> struct A {
    struct B {};
    vector<B> vec;
    vector<B>::iterator it;
};
Как быть?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2010, 12:53     Итератор контейнера внутреннего класса шаблона
Посмотрите здесь:

C++ Метод класса возвращающий итератор
C++ необходимо в шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера
Итератор для собственного контейнера C++
как сделать, чтобы итератор указывал на определенный элемент контейнера C++
итератор для контейнера C++
C++ Итератор класса vector
C++ Итератор контейнера set
Итератор внутри шаблонного класса C++
C++ STL итератор на конец контейнера
Итератор для класса-группы C++
Итератор для класса с массивом C++
итератор для шаблонного класса C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1599 / 991 / 117
Регистрация: 27.09.2009
Сообщений: 1,910
Завершенные тесты: 1
30.06.2010, 13:30     Итератор контейнера внутреннего класса шаблона #2
C++
1
    typename vector<B>::iterator it;
konstantin314
Сообщений: n/a
30.06.2010, 13:38     Итератор контейнера внутреннего класса шаблона #3
Спасибо, это помогло!

Но хотелось бы уточнить следующее. Если я правильно понимаю, ключевое слово typename используется при неоднозначности разбора выражения компилятором. Но каков альтернативный разбор в данном случае?
Nick Alte
Эксперт С++
1599 / 991 / 117
Регистрация: 27.09.2009
Сообщений: 1,910
Завершенные тесты: 1
30.06.2010, 15:09     Итератор контейнера внутреннего класса шаблона #4
Поскольку данный идентификатор разбирается в составе шаблона, происходит упрощённая проверка синтаксиса. В частности, компилятор не раздёргивает упомянутый тип vector, а просто отмечает, что идёт выбор некоего имени из некоего пространства имён. Такие имена по умолчанию не считаются именами типов. Слово typename используется для заверения компилятора в том, что мы как раз-таки выбираем имя типа. Эта механика рассчитана прежде всего на параметры шаблона (ведь при описании шаблона мы ничего пока не знаем про то, какими типами он будет параметризован и ничего не знаем о природе идентификаторов, вынимаемых из параметра).
Полное создание и проверка типа, вложенной в него структуры, основанного на ней вектора и т.п. будет происходить во время инстанциации шаблона.
Yandex
Объявления
30.06.2010, 15:09     Итератор контейнера внутреннего класса шаблона
Ответ Создать тему
Опции темы

Текущее время: 23:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru