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

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

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

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

30.06.2010, 12:53. Просмотров 900. Ответов 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++
Собственно, интересует такой вопрос: &quot;Как создать собственный класс-итератор для контейнера?&quot;. Контейнер построен по типу &quot;очередь&quot;....

Итератор контейнера set - C++
Здравствуйте! Каким образом можно изменить значение итератора set на n (кроме вызова ++ n раз). Можно ли преобразовать итератор одного типа...

Итератор для собственного контейнера - C++
понимаю, что уже создан миллион подобных тем, НО я не вьехал в них. мне необходимо реализовать собственный контейнер для использования...

STL итератор на конец контейнера - C++
Подскажите пожалуйста у меня задача сделать дерево и слизать интерфейс с STL std::map. Вопрос в следующем: когда мы обходим map итератором...

Вывод контейнера указателей через потоковый итератор - C++
Доброго дня всем. Собственно: std::list&lt;int*&gt; list; list.push_back(new int(45)); list.push_back(new int(78)); ...

Как сделать, чтобы итератор указывал на определенный элемент контейнера? - C++
как сделать, чтобы итератор указывал на, допустим, пятый элемент контейнера (вектора)

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nick Alte
Эксперт С++
1637 / 1009 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
30.06.2010, 13:30 #2
C++
1
    typename vector<B>::iterator it;
1
konstantin314
Сообщений: n/a
30.06.2010, 13:38 #3
Спасибо, это помогло!

Но хотелось бы уточнить следующее. Если я правильно понимаю, ключевое слово typename используется при неоднозначности разбора выражения компилятором. Но каков альтернативный разбор в данном случае?
Nick Alte
Эксперт С++
1637 / 1009 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
30.06.2010, 15:09 #4
Поскольку данный идентификатор разбирается в составе шаблона, происходит упрощённая проверка синтаксиса. В частности, компилятор не раздёргивает упомянутый тип vector, а просто отмечает, что идёт выбор некоего имени из некоего пространства имён. Такие имена по умолчанию не считаются именами типов. Слово typename используется для заверения компилятора в том, что мы как раз-таки выбираем имя типа. Эта механика рассчитана прежде всего на параметры шаблона (ведь при описании шаблона мы ничего пока не знаем про то, какими типами он будет параметризован и ничего не знаем о природе идентификаторов, вынимаемых из параметра).
Полное создание и проверка типа, вложенной в него структуры, основанного на ней вектора и т.п. будет происходить во время инстанциации шаблона.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2010, 15:09
Привет! Вот еще темы с ответами:

В шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера - C++
Собсно #include &lt;windows.h&gt; #include &lt;iterator&gt; #include &lt;vector&gt; using namespace std; template &lt;class T, template...

Вызов метода внутреннего класса методом внешнего класса - C++
Не могу разобраться как реализовать вложенный класс и как его вызвать. Занимаюсь по Лафоре, про вложенные классы ничего, а задача в конце...

Свой итератор для своего шаблона - C++
Доброго дня всем. Долго разбираюсь, никак не разберусь. Написал свой шаблонный класс. Написал к нему итератор(тоже шаблон). Пытаюсь...

Определение метода-шаблона за пределами шаблона класса - C++
День добрый! Разбираюсь в шаблонах, решил копнуть поглубже. Вот пример: template &lt;typename T1&gt; class K // шаблон класса { public:...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.06.2010, 15:09
Ответ Создать тему
Опции темы

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