operator < в STL set
От: _sden  
Дата: 16.07.03 09:35
Оценка:
Помогите плиз никак не могу разобраться
Есть такой класс
class CUSqlItem
{
public:
CUSqlItem();
CUSqlItem(CUSqlItem& source);
virtual ~CUSqlItem();

public:
bool operator < (CUSqlItem& source);
public:
bool GetString(CString& retVal);
bool Create(CString sField, CString sValue);
bool Create(CString sField, int iValue);
bool Create(CString sField, double dValue);

private:
CString m_sField;
CUSqlValue m_Value;
};

и соответственно реализация операторов и функций тоже есть!

делаю так
typedef set <CUSqlItem> SET_SQL_ITEMS;
SET_SQL_ITEMS m_aItems;


{
CUSqlItem item;
if(!item.Create(sField, sValue))
return false;

m_aItems.insert(item);
return true;
}


компилятор выдает ошибку
c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2678: binary '<' : no operator defined which takes a left-hand operand of type 'const class CUSqlItem' (or there is no acceptable conversion)
c:\program files\microsoft visual studio\vc98\include\functional(86) : while compiling class-template member function 'bool __thiscall std::less<class CUSqlItem>::operator ()(const class CUSqlItem &,const class CUSqlItem &) const'

Может подскажите ???
Re: operator < в STL set
От: Lorenzo_LAMAS  
Дата: 16.07.03 09:42
Оценка:
Оператор сравнения объяви так


bool operator < (constCSQLItem &)const;
Of course, the code must be complete enough to compile and link.
Re: operator < в STL set
От: PM  
Дата: 16.07.03 09:51
Оценка:
s> Помогите плиз никак не могу разобраться
s> Есть такой класс
s> class CUSqlItem
s> {
s> public:
s> bool operator < (const CUSqlItem& source);
s> };
s> Может подскажите ???
Тебе же компилятор английским по белому говорит, что нужен константый объект
Posted via RSDN NNTP Server 1.6 RC1
Re[2]: А в реализации так надо писать ?
От: _sden  
Дата: 16.07.03 09:52
Оценка:
bool CUSqlItem::operator<(const CUSqlItem& source) const
{
...
}
Re[3]: А в реализации так надо писать ?
От: Lorenzo_LAMAS  
Дата: 16.07.03 09:54
Оценка:
Да, конечно, сигнатуры должны совпадать
Of course, the code must be complete enough to compile and link.
Re[4]: Тогда возникает такая ошибка ???
От: _sden  
Дата: 16.07.03 09:59
Оценка:
c:\program files\microsoft visual studio\vc98\include\xmemory(34) : error C2558: class 'CUSqlItem' : no copy constructor available
c:\program files\microsoft visual studio\vc98\include\xtree(583) : see reference to function template instantiation 'void __cdecl std::_Construct(class CUSqlItem *,const class CUSqlItem &)' being compiled
Re[5]: Тогда возникает такая ошибка ???
От: deviv  
Дата: 16.07.03 10:02
Оценка:
Попробуй так:

CUSqlItem(const CUSqlItem& source);
... << RSDN@Home 1.1 beta 1 >>
WBR,
Влад Волосюк
Re[5]: Тогда возникает такая ошибка ???
От: Lorenzo_LAMAS  
Дата: 16.07.03 10:02
Оценка: +1
Это потому как теперь и конструктор копий ты должен поправить CSQLItem(const CSQLItem &) — кстати его стоит всегда с такой сигнатурой определять, есть некоторые хитрые ситуации когда это вообще обязательно.
Of course, the code must be complete enough to compile and link.
Re[6]: Спасибо
От: _sden  
Дата: 16.07.03 10:07
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Это потому как теперь и конструктор копий ты должен поправить CSQLItem(const CSQLItem &) — кстати его стоит всегда с такой сигнатурой определять, есть некоторые хитрые ситуации когда это вообще обязательно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.