![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Guest_Александр |
|
|||
|
Unregistered |
Хочется создать контейнер set из указателей на объекты класса A, упорядочивая указатели особым образом.
Но вот эта штука в MS VC++ 6.0 почему-то не компилируется. #include <string> #include <set> #include <iostream> using namespace std; class A { string m_name; public: A(const string& name):m_name(name){}; const string& GetName(){ return m_name;}; }; bool operator<(const auto_ptr<A>& _L, const auto_ptr<A>& _R) {return (_L->GetName() < _R->GetName());} void main(void) { set<auto_ptr<A> > myset; auto_ptr<A> tmp(new A("aaa")); myset.insert(tmp); } Компилятор сыпет ерроры. В чем косяк c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2784: 'bool __cdecl std::operator <(const class std::multiset<_K,_Pr,_A> &,const class std::multiset<_K,_Pr,_A> &)' : could not deduce template argument for 'const class s td::multiset<_K,_Pr,_A> &' from 'const class std::auto_ptr<class A>' c:\program files\microsoft visual studio\vc98\include\functional(86) : while compiling class-template member function 'bool __thiscall std::less<class std::auto_ptr<class A> >::operator ()(const class std::auto_ptr<class A> &,const class std ::auto_ptr<class A> &) const' c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2784: 'bool __cdecl std::operator <(const class std::set<_K,_Pr,_A> &,const class std::set<_K,_Pr,_A> &)' : could not deduce template argument for 'const class std::set<_K ,_Pr,_A> &' from 'const class std::auto_ptr<class A>' c:\program files\microsoft visual studio\vc98\include\functional(86) : while compiling class-template member function 'bool __thiscall std::less<class std::auto_ptr<class A> >::operator ()(const class std::auto_ptr<class A> &,const class std ::auto_ptr<class A> &) const' c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2784: 'bool __cdecl std::operator <(const class std::_Tree<_K,_Ty,_Kfn,_Pr,_A> &,const class std::_Tree<_K,_Ty,_Kfn,_Pr,_A> &)' : could not deduce template argument for 'c onst class std::_Tree<_K,_Ty,_Kfn,_Pr,_A> &' from 'const class std::auto_ptr<class A>' c:\program files\microsoft visual studio\vc98\include\functional(86) : while compiling class-template member function 'bool __thiscall std::less<class std::auto_ptr<class A> >::operator ()(const class std::auto_ptr<class A> &,const class std ::auto_ptr<class A> &) const' c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2784: 'bool __cdecl std::operator <(const class std::basic_string<_E,_Tr,_A> &,const _E *)' : could not deduce template argument for 'const class std::basic_string<_E,_Tr, _A> &' from 'const class std::auto_ptr<class A>' c:\program files\microsoft visual studio\vc98\include\functional(86) : while compiling class-template member function 'bool __thiscall std::less<class std::auto_ptr<class A> >::operator ()(const class std::auto_ptr<class A> &,const class std ::auto_ptr<class A> &) const' c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2784: 'bool __cdecl std::operator <(const _E *,const class std::basic_string<_E,_Tr,_A> &)' : could not deduce template argument for 'const *' from 'const class std::auto _ptr<class A>' c:\program files\microsoft visual studio\vc98\include\functional(86) : while compiling class-template member function 'bool __thiscall std::less<class std::auto_ptr<class A> >::operator ()(const class std::auto_ptr<class A> &,const class std ::auto_ptr<class A> &) const' c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2784: 'bool __cdecl std::operator <(const class std::basic_string<_E,_Tr,_A> &,const class std::basic_string<_E,_Tr,_A> &)' : could not deduce template argument for 'const class std::basic_string<_E,_Tr,_A> &' from 'const class std::auto_ptr<class A>' c:\program files\microsoft visual studio\vc98\include\functional(86) : while compiling class-template member function 'bool __thiscall std::less<class std::auto_ptr<class A> >::operator ()(const class std::auto_ptr<class A> &,const class std ::auto_ptr<class A> &) const' c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2784: 'bool __cdecl std::operator <(const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : could not deduce te mplate argument for 'const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &' from 'const class std::auto_ptr<class A>' c:\program files\microsoft visual studio\vc98\include\functional(86) : while compiling class-template member function 'bool __thiscall std::less<class std::auto_ptr<class A> >::operator ()(const class std::auto_ptr<class A> &,const class std ::auto_ptr<class A> &) const' c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2784: 'bool __cdecl std::operator <(const struct std::pair<_T1,_T2> &,const struct std::pair<_T1,_T2> &)' : could not deduce template argument for 'const struct std::pair< _T1,_T2> &' from 'const class std::auto_ptr<class A>' c:\program files\microsoft visual studio\vc98\include\functional(86) : while compiling class-template member function 'bool __thiscall std::less<class std::auto_ptr<class A> >::operator ()(const class std::auto_ptr<class A> &,const class std ::auto_ptr<class A> &) const' c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2676: binary '<' : 'const class std::auto_ptr<class A>' does not define this operator or a conversion to a type acceptable to the predefined operator c:\program files\microsoft visual studio\vc98\include\functional(86) : while compiling class-template member function 'bool __thiscall std::less<class std::auto_ptr<class A> >::operator ()(const class std::auto_ptr<class A> &,const class std ::auto_ptr<class A> &) const' Error executing cl.exe. |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Надо поиграться с определениями.
Попробуй, например, так:
-------------------- Волны гасят ветер... |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Ты пытаешься претворить в жизнь то, что постарался запретить комитет по стандартизации С++, а именно контейнеры auto_ptr, иначе COAP(Containers Of Auto_Ptr) . Так что возможно библиотека STL, включенная в VC6 просто поддерживает это запрещение. Дело в том что работа таких контейнеров просто непредсказуема и связана она с тем, что при копировании auto_ptr право владения объектом, на которорый ссылается указатетель, переходит к копии, а исходному указателю присваивается NULL. За подорбностями отсылаю к "Эффективному использованию STL" Скотта Мейерса (Совет 8:Никогда не создавайте контейнеры, содержащие auto_ptr)
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |