![]() |
|
Модераторы: bsa |
![]()
|
|
| astakor |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.6.2012 Репутация: нет Всего: нет |
Доброго всем времени суток!
Возникла необходимость написать код, где шаблон структуры данных – двусвязный циклический список, содержащий статический массив указателей на объекты. Также надо переопределить операции сравнения включаемых объектов. Вот в этом пункте и возникли проблемы. Собственно, код:
Если писать переопределение операции сравнения так:
То получится совсем не то, что надо. Я так понял, что
будет самым близким вариантом, но, почему-то Так что, люди добрые, подскажите как сделать переопределение операций для включаемых объектов так, чтобы они (операции) работали. Ну, или хотя бы направление, куда копать. Это сообщение отредактировал(а) astakor - 19.6.2012, 13:42 |
||||||
|
|||||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
operator< определяется вне шаблона.
|
|||
|
||||
| baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
переопределение операции сравнения - дело сравниваемого типа, а не контейнера. для некоторых типов этого вообще нельзя сделать, например для встроенных. что именно не компилится? это только если operator< член класса T, но об этом типе в шаблоне мы мало что знаем и уж никак не можем его модифицировать (правда, можем наследовать). поможет функция не-член класса, с двумя аргументами
однако я совершенно не понимаю как это может пригодиться, ведь о T (в Вашей постановке) мы ничего не знаем, значит не знаем как сравнивать |
||||
|
|||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
это лишь спецификация
|
|||
|
||||
| astakor |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.6.2012 Репутация: нет Всего: нет |
Спасибо, попробую у себя.
Т.е., по заданию, тип данных включаемых объектов int или char.
Error 1 error C3254: 'List<T>' : class contains explicit override 'T::<' but does not derive from an interface that contains the function declaration list.h Error 2 error C2838: '<' : illegal qualified name in member declaration list.h Error 3 error C2825: 'T': must be a class or namespace when followed by '::' list.h Error 4 error C2039: '<' : is not a member of '`global namespace'' list.h Error 5 error C2146: syntax error : missing ';' before identifier '<' list.h Error 6 error C2327: 'List<T>::T' : is not a type name, static, or enumerator list.h Error 7 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int list.h Это сообщение отредактировал(а) astakor - 19.6.2012, 12:29 |
||||||
|
|||||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Если это трактовать как написанно, то это не задача самого List'а, а задача того T, которое в него подается Видимо хотели получить возможность задавать функтор для сравнения T в шаблоне List'а Посмотрите, как это сделано в stl для std::list<> -
|
||||
|
|||||
| astakor |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.6.2012 Репутация: нет Всего: нет |
Вообще, нужно, чтобы в методе List'a например:
использовался переопределенный оператор сравнения
Т.е., насколько я понял, это
Посмотреть-то посмотрел, но догадаться как это использовать для нужного результата не получается :( Буду рад подсказке |
||||||||
|
|||||||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Вместо явного *nwValue < *(rootItem->Data[i]) вызывается compare_object(*nwValue,*(rootItem->Data[i])) Где compare_object есть -
Ну например, у вас T есть такая структура -
Это сообщение отредактировал(а) xvr - 19.6.2012, 14:07 |
||||||
|
|||||||
| astakor |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.6.2012 Репутация: нет Всего: нет |
xvr, большое Вам спасибо, теперь все стало понятно
Думаю, вопрос решен, благодарю всех за участие |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |