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

Шаблоны и вложенные классы - синтаксис - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Surgery
3 / 3 / 0
Регистрация: 28.09.2013
Сообщений: 32
23.01.2014, 22:55     Шаблоны и вложенные классы - синтаксис #1
Пишу класс бинарного красно черного дерева, решил сделать структуру узла в нем вложенной, но столкнулся с проблемой непонимания синтаксиса и борьбы с языком
идея примерно такова
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template <class T> Tree
{
    template <class ValType> class Node;
    Node<T> root;
    //...
};
//Реализация Node
template <class T> template <class Valtype> class Tree<T>::Node<Valtype> //? уже вопрос, но студия характеризует полное имя этого класса так
{
    Node<Valtype> * left; //тут совсем встрял, компилятор выдает ошибки
// (например, "Node не является шаблоном (???)", ничего не проясняющие и кажется,
// мало связанные с истинной проблемой, аналогично и на Tree<T>::Node<Valtype> * left;
 
}
Вопрос: как же все таки правильно объявить то что мне надо?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 22:55     Шаблоны и вложенные классы - синтаксис
Посмотрите здесь:

Перегрузка операция + вложенные классы C++
Композиция двух классов и вложенные классы C++
C++ Вложенные классы!!
C++ классы полиморфизм шаблоны C++
вложенные классы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
26.01.2014, 20:51     Шаблоны и вложенные классы - синтаксис #21
Цитата Сообщение от iDeveloper Посмотреть сообщение
Где можно найти подробное описание iterator_traits и свойств, меня интересуют reference, pointer, difference_type?
Наиболее подробно это описано в стандарте языка, я думаю) А так у меня например есть книжка B. Stroustrup "The C++ Programming Language" 3-d edition, там в Chapter 19. Iterators and Allocators об этом написано, думаю найти на русском труда не составит.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iDeveloper
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 21
27.01.2014, 12:51     Шаблоны и вложенные классы - синтаксис #22
MrGluck, большое спасибо.

Добавлено через 15 часов 36 минут
Привет gray_fox. Есть небольшая проблема:
когда мы пишем - const int* ptr, то с помощью ptr нельзя менять значение переменной на которую указывает ptr. Как так же сделать с моим итератором - const list<int>::iterator iter. ?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.01.2014, 13:04     Шаблоны и вложенные классы - синтаксис #23
iDeveloper, есть константный итератор. Это другой класс list<int>::const_iterator
iDeveloper
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 21
27.01.2014, 13:13     Шаблоны и вложенные классы - синтаксис #24
мне нужен итератор на константу, а не константный итератор.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.01.2014, 13:39     Шаблоны и вложенные классы - синтаксис #25
Цитата Сообщение от iDeveloper Посмотреть сообщение
мне нужен итератор на константу, а не константный итератор.
вы попробуйте сначала, а потом возмущайтесь
Member type const_iterator is a random access iterator type that points to a const element.
iDeveloper
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 21
27.01.2014, 13:47     Шаблоны и вложенные классы - синтаксис #26
Цитата Сообщение от Tulosba Посмотреть сообщение
Member type const_iterator is a random access iterator type that points to a const element.
Да Вы правы. Посмотрел как работают итераторы и константные итераторы контейнеров STL. Просто понятие константный итератор для встроенных типов означает другое.
iDeveloper
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 21
28.01.2014, 23:43     Шаблоны и вложенные классы - синтаксис #27
Привет, gray_fox. Я создал итератор, вроде бы работает нормально. Но когда я использую
C++
1
std::transform(list_int.begin(),list_int.end(),list_int.begin(),tForm)
, то появляется - "error C4996: 'std::_Transform1': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'" . Я знаю что можно написать "#define _SCL_SECURE_NO_WARNINGS" чтобы отключить предупреждение, но я хотел бы чтобы оно без этого работало. Как это исправить?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2014, 16:27     Шаблоны и вложенные классы - синтаксис
Еще ссылки по теме:

C++ Вложенные классы
C++ [Классы, Наследование, Шаблоны] Добавление записи в список
Вложенные классы. Что за синтаксис такой? C++

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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
29.01.2014, 16:27     Шаблоны и вложенные классы - синтаксис #28
Цитата Сообщение от iDeveloper Посмотреть сообщение
Как это исправить?
Не знаю, VС вообще на многие стандартные функции ругается как на небезопасные; доля правды в этом есть, конечно, но я эти предупреждения всегда отключаю)
Yandex
Объявления
29.01.2014, 16:27     Шаблоны и вложенные классы - синтаксис
Ответ Создать тему
Опции темы

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