Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Видимость приватного вложенного класса, Для друга класса 
V
    Опции темы
Хоббит
Дата 14.8.2011, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



Задача наверно тривиальная, но что-то не пойму.

Есть класс для дерева tree. У него есть некоторая вложенная структура struct item, которая закрыта. И есть класс итератора, который должен иметь доступ до tree::item.

Как то так.

Код

template <typename T>
class tree_iterator;

template <typename T>
class tree
{
private:
  struct item;
public:
  friend class tree_iterator<T>;
  typedef tree_iterator<T> iterator;
...
// Тут описывается item.
};

template <typename T>
class tree_iterator
{
  tree_iterator(tree<T>::item* item_) // Тут ошибка. Говорит, что tree<T>::item is private
  {
  }
}


Добавлено через 3 минуты и 39 секунд
Сильно извиняюсь. У меня не тип был не виден. А конструктор tree_iterator из tree. Надо было в tree_iterator добавить друга tree, чтобы он мог его создавать.
PM MAIL   Вверх
volatile
Дата 14.8.2011, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(Хоббит @  14.8.2011,  15:47 Найти цитируемый пост)
Надо было в tree_iterator добавить друга tree, чтобы он мог его создавать

Может просто не делать конструктор итератора приватным? Какой смысл в итераторе,который нельзя создать снаружи???

Код

class tree_iterator
{
public: // <==
  tree_iterator(tree<T>::item* item_) {}
}

PM MAIL   Вверх
Леопольд
Дата 15.8.2011, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(volatile @  14.8.2011,  21:52 Найти цитируемый пост)
Какой смысл в итераторе,который нельзя создать снаружи???
Инкапсуляция... Валидные итераторы должны создаваться только средствами контейнера, но конструктор копии и деструктор должны быть доступны из другого скоупа.



--------------------
вопросов больше чем ответов
PM MAIL   Вверх
volatile
Дата 15.8.2011, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Леопольд, впрочем да, согласен.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1170 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.