![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| IvanoffAndrey |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 8.7.2006 Где: СГАУ Репутация: нет Всего: 2 |
Здравствуйте. Данная тема уже поднималась на этом форуме. http://forum.vingrad.ru/topic-17379.html Но толи там ошибка в формулировки проблемы то ли в чем непонятно. Короче, у меня ситуация полность противоположенная.
Непроходит вот этот код
Решение этой проблемы я уже прочитал в топике ранее. Однако не понятно: почему не компилируется данный код? Ошибка: Error 1 error C2555: 'Ss<T>::operator ++': overriding virtual function return type differs and is not covariant from 'Fs<T>::operator ++' Это сообщение отредактировал(а) IvanoffAndrey - 16.9.2007, 17:33 --------------------
Размерность пространства есть число Pi и в каждой точке вселенной оно стремиться к этому числу. |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Тип возвращаемого значения виртуальной ф-ции если и можно менять(не помню), то в очень ограниченных рамках.
Добавлено через 14 секунд Сделай опретор не виртуальным и всё будет гут. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| Skladnoy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 13.9.2007 Репутация: нет Всего: нет |
Ну во первых, работа телепата в наше время оплачивается отчаянно хорошо, и все телепаты телепортировались кто на Багамы, кто куда. Поэтому было бы неплохо написать на что именно ругается компилятор.
Проблем в коде две: 1. Приватные конструкторы класса Ss (название вполне бессмысленное) 2. Операторы имеют разный тип возвращаемого значения и не могут быть перегружены. Делать их виртуальными потому бессмысленно. Можно применить маленькую хитрость описанную в "уже поднятой теме" |
|||
|
||||
| IvanoffAndrey |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 8.7.2006 Где: СГАУ Репутация: нет Всего: 2 |
Т.е. Тип возвращаемого значения вирутальной функции можно сменить с Fs<T> & на Ss<T> & (при виртуальности префиксного оператора), а вот с Fs<T> const на Ss<T> const нельзя? Ну это вооще же неочевидно. А Где можно посмотреть про то в каких пределах можно менять тип возвращаемого значения виртуальной функции?
Исправился. Я честно говоря впервые столкнулся с этим вопросом. --------------------
Размерность пространства есть число Pi и в каждой точке вселенной оно стремиться к этому числу. |
||||
|
|||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
http://www.kuzbass.ru/docs/isocpp/derived.html#class.virtual пункт 5 |
|||
|
||||
| IvanoffAndrey |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 8.7.2006 Где: СГАУ Репутация: нет Всего: 2 |
Плиз переведите в кратце о чем говорится. А то я что то пасую перед этим текстом. Знаний англицкого не хватает. --------------------
Размерность пространства есть число Pi и в каждой точке вселенной оно стремиться к этому числу. |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Это должна быть ссылка на класс или указатель на класс.
Класс на который ссылаемся/указываем должен быть таким же или в Ss-версии должен быть класс прямо или косваенно унаследованный от класса из Fs-версии. cv-квалификация указателя должна быть такой же. cv-квалификация класса на который указываем/ссылаемся в Ss-версии должна быть такой же, как и в Fs-версии или более слабой. cv-квалификация - это const volatile квалификация. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| IvanoffAndrey |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 8.7.2006 Где: СГАУ Репутация: нет Всего: 2 |
Мда, неожиданно. archimed7592 - держи плюс.
Добавлено @ 18:03 Ну почему стандарт на русский не переведут???? Или хотя бы оглавление стандарта. Книжки всякие дебильные переводят, а стандарт нет. Что им трудно в виде книги выпустить или хелпа? Все спасибо вопрос закрыт. Это сообщение отредактировал(а) IvanoffAndrey - 16.9.2007, 18:10 --------------------
Размерность пространства есть число Pi и в каждой точке вселенной оно стремиться к этому числу. |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
А смысл? Если ты не знаешь английский - стандарт не для тебя. В программировании без английского никуда. Тем более, что и так немаленький стандарт в русском переводе получиться ещё больше(на русском невозможно так точно и лаконично формулировать утверждения). К слову, английский люблю больше чем С++ -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| IvanoffAndrey |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 8.7.2006 Где: СГАУ Репутация: нет Всего: 2 |
Тем не менее, я думаю что всетаки не помешало бы.
--------------------
Размерность пространства есть число Pi и в каждой точке вселенной оно стремиться к этому числу. |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Не ты один так думаешь Он кстати ответ на мой давнишний комментарий о бессмыслености перевода зачем-то оформил как отдельный пост, который сейчас на главной странице... Только сейчас набрёл -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Это как раз вполне очевидно: полиморфизм поддерживают ссылки и указатели, а не сами объекты... Если ты (в своем варианте) вызовешь через указатель на базовый класс функцию для объекта производного, а потом присвоишь возвращаемое значение базовому объекту (а иначе не получится) - произойдет срезка, со всеми вытекающими последствиями. А если не вызывать полиморфно, но зачем виртуальные функции. -------------------- ... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |