![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Hohhi |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 25.2.2006 Где: Молдова Репутация: нет Всего: нет |
Доброго дня! Хочу научиться пользоваться пользовательскими классами в multimap. В качестве примера я буду использовать класс Time. В качестве ассоциации временные пояса, то есть ключевому времени будут соответствовать значения городов. Пишу с использованием VS 2008. Приведу пользовательский класс:
А вот попытка его использовать:
В результате исполения выдаются ошибки в 143 строке файла fucntional, а именно:
Работаю с STL впервые. Пытался комментить прогу построчно, понять, что не так. Но так и не понял... |
||||||
|
|||||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Hohhi, приведите минимальный код, необходимый для воспроизведения ошибки
Добавлено через 1 минуту и 24 секунды и заодно текст ошибки, и стек вызовов, если ошибка в рантайме |
|||
|
||||
| Hohhi |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 25.2.2006 Где: Молдова Репутация: нет Всего: нет |
привожу минимальный код:
Привожу ошибки: Error 1 error C2784: 'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)' : could not deduce template argument for 'const std::_Tree<_Traits> &' from 'const Time' c:\program files\microsoft visual studio 9.0\vc\include\functional 143 lab32 Error 2 error C2784: 'bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *)' : could not deduce template argument for 'const std::basic_string<_Elem,_Traits,_Alloc> &' from 'const Time' c:\program files\microsoft visual studio 9.0\vc\include\functional 143 lab32 Error 3 error C2784: 'bool std::operator <(const _Elem *,const std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'const _Elem *' from 'const Time' c:\program files\microsoft visual studio 9.0\vc\include\functional 143 lab32 Error 4 error C2784: 'bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'const std::basic_string<_Elem,_Traits,_Alloc> &' from 'const Time' c:\program files\microsoft visual studio 9.0\vc\include\functional 143 lab32 Error 5 error C2784: 'bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'const Time' c:\program files\microsoft visual studio 9.0\vc\include\functional 143 lab32 Error 6 error C2784: 'bool std::operator <(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)' : could not deduce template argument for 'const std::_Revranit<_RanIt,_Base> &' from 'const Time' c:\program files\microsoft visual studio 9.0\vc\include\functional 143 lab32 Error 7 error C2784: 'bool std::operator <(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)' : could not deduce template argument for 'const std::pair<_Ty1,_Ty2> &' from 'const Time' c:\program files\microsoft visual studio 9.0\vc\include\functional 143 lab32 Error 8 error C2676: binary '<' : 'const Time' does not define this operator or a conversion to a type acceptable to the predefined operator c:\program files\microsoft visual studio 9.0\vc\include\functional 143 lab32 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Hohhi, у вашего класса Time нет операторов сравнения
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
В описании ошибки, выдываемой компилятором, всё чётко сказано: не хватает оператора меньше для класса Time. В multimap можно добавлять классы с определённым оператором меньше.
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Hohhi |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 25.2.2006 Где: Молдова Репутация: нет Всего: нет |
borisbn,
GoldFinch, спасибо, просто я эти операторы непосредственно в своём коде не использовал. Это необходимо для правильной работы итераторов? Добавлено через 5 минут и 21 секунду Подкорректировал код, всё замечательно работает, спасибо за оперативную помощь. Помогите только разобраться с причиной необходимости оператора <. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Hohhi, multimap'у нужна поддержка операции "<" для сравнения ключей
т.е. можно задать свой класс для сравнения, по умолчанию используется std::less который использует operator< Это сообщение отредактировал(а) GoldFinch - 24.4.2010, 15:02 |
|||
|
||||
| Hohhi |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 25.2.2006 Где: Молдова Репутация: нет Всего: нет |
Ясно, вот ключевое пояснение:
The multimap object uses this expression to determine the position of the elements in the container. All elements in a multimap container are ordered following this rule at all times. Спасибо большое |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |