![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Chaos A.D. |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Подскажите, пожалуйста, разве субкласс не имеет доступа к защищенным функциям класса? У меня не компилится похожий код (GCC 3.какой-то, VC++ .NET) :
Оба компилера отказываются вызывать из Stack<T>::swap функцию StackImpl<T>::swap, мотивируя это тем, что Stack<T> якобы не имеет доступа к базовому. Интересно, что нашло на оба моих компилера? Если бы его претензии к моему коду были бы подкреплены стандартом языка, тогда я не мог бы приводить ссылку на Stack<T> к ссылке на StackImpl<T>. Под рукой нет Страуструпа, но на память помню, что вроде-бы члены классов могут приводить указатели и все такое, и имеют право вызывать защищенные функции базовых классов. Или я ошибаюсь? --------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
|||
|
||||
| Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Ну значит не имеет, если ты обращаешься просто к экземпляру базовго класса. Собсно зачем это надо, копаться во внутренностях экземпляра родителя?
На
Комо не ругается. А ему можно верить. Гнусовое имхо совпадает с имхо хомяка. Кстати, у тебя ошибка -
Конструктор вызывает сам себя. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
| Chaos A.D. |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Да, я и сам после того, как запостил, заметил. Просто писал сразу в форум, по памяти. На самом деле это у меня должна была быть реализация копирующего присваивания.
А может кто-нибудь из счастливых обладателей копии стандарта пояснит, как там сказано на этот счет? Это сообщение отредактировал(а) Chaos A.D. - 24.11.2005, 15:45 --------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
||||
|
|||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: 9 Всего: 71 |
У меня VC и MinGW код компилят... Сам ничего не скажу
А почти счастливым обладателем стандарта может стать любой желающий Добавлено 17:26 наверное ты там объявил swap как private. protected, как сейчас должен работать по идее. Это сообщение отредактировал(а) Perchilla - 24.11.2005, 17:24 |
|||
|
||||
| Chaos A.D. |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Вот более-менее полный код, демонстрирующий эту траблу...
Если заменить в Stack<T>::swap
на
Это сообщение отредактировал(а) Chaos A.D. - 24.11.2005, 19:45 --------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
||||||
|
|||||||
| LPBOY |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Видимо компиляторы глючат. Нет причин закрывать доступ к swap. Кстати, для имен зависящих от параметра шаблона надо использовать уточнение, например, this->. Такой код компилирует comeau on-line.
--------------------
Каждый человек по-своему прав, а по-моему нет... |
||||
|
|||||
| LPBOY |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Возможно лучше будет вместо
сделать так:
или объявить Base::swap в производном классе в public секции с помощью using:
или сразу объявить ее в базовом классе открытой. --------------------
Каждый человек по-своему прав, а по-моему нет... |
||||||
|
|||||||
| Chaos A.D. |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Спасибо за советы. Это у меня был тестовый пример. Заставить работать я его мог, но было интересно, почему не работает так, как было в исходном варианте. Похоже, действительно, компилеры глючат. Надо качать новый гнус... --------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |