operator ()
От: StasT  
Дата: 04.09.02 12:51
Оценка:
Создаю map<CTest, int> получаю ошибку:

binary '<' : no operator defined which takes a left-hand operand of type 'const class CTest' (or there is no acceptable conversion).
Как решить эту проблему?
Re: operator ()
От: Vasiliy_Krasnokutsky Россия  
Дата: 04.09.02 12:54
Оценка:
Здравствуйте StasT, Вы писали:

ST>Создаю map<CTest, int> получаю ошибку:


ST>binary '<' : no operator defined which takes a left-hand operand of type 'const class CTest' (or there is no acceptable conversion).

ST>Как решить эту проблему?

Попробуй std::map<CTest, int>
Re: operator ()
От: comer США http://getboost.codeplex.com/
Дата: 04.09.02 12:56
Оценка:
Здравствуйте StasT, Вы писали:

ST>Создаю map<CTest, int> получаю ошибку:


ST>binary '<' : no operator defined which takes a left-hand operand of type 'const class CTest' (or there is no acceptable conversion).

ST>Как решить эту проблему?

Скорее всего map не виден, т.е. либо файл не подключен, там где map лежит (#include ...) либо namespace не открыт (using namspace ... или std::map<CTest, int> ).
getboost.codeplex.com
citylizard.codeplex.com
Re[2]: operator ()
От: StasT  
Дата: 04.09.02 12:59
Оценка:
с map all OK!
I use:

std::map<CTest, int> Map;
CTest t1;
Map[t1] = 0; // Вот здесь ошибка!!!!!
Re: operator ()
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 04.09.02 13:00
Оценка:
Здравствуйте StasT, Вы писали:

ST>Как решить эту проблему?


Напиши правильную реализацию оператора < для CTest
Re: operator ()
От: Анатолий СССР  
Дата: 04.09.02 13:00
Оценка:
Здравствуйте StasT, Вы писали:

ST>Создаю map<CTest, int> получаю ошибку:


ST>binary '<' : no operator defined which takes a left-hand operand of type 'const class CTest' (or there is no acceptable conversion).

ST>Как решить эту проблему?

Компилятор требует определить порядок (оператор <) для объектов класса CTest, поскольку имеено он используется в формировании порядка следования пар в ассоциативном контейнере.
Re[2]: operator ()
От: StasT  
Дата: 04.09.02 13:02
Оценка:
operator <, operator == — перегружены!
Re: operator ()
От: Anton V. Kolotaev  
Дата: 04.09.02 13:02
Оценка:
Здравствуйте StasT, Вы писали:

ST>Создаю map<CTest, int> получаю ошибку:


ST>binary '<' : no operator defined which takes a left-hand operand of type 'const class CTest' (or there is no acceptable conversion).

ST>Как решить эту проблему?

1. Завести этот оператор. + он должен вводить осмысленное отношение порядка.
Например.

inline bool operator < (const CTest &a, const CTest &b) 
{   return &a < &b;  }   
// используется неизменность адресов объектов и линейная упорядоченность памяти.


2. Написать спецмализацию std::less<CTest>
3. и еще что-то, а что точно, не помню
Re[3]: operator ()
От: Анатолий СССР  
Дата: 04.09.02 13:08
Оценка:
Здравствуйте StasT, Вы писали:

ST>operator <, operator == — перегружены!

Что значит перегружены? Они определены?

class CTest
{
public:
   ...
   bool operator(const CTest &test)
   {
      return (_value <test._value);
   }
private:
   int _value;
};
Re[3]: operator ()
От: Mozhay Россия www.mozhay.chat.ru
Дата: 04.09.02 13:09
Оценка:
Здравствуйте StasT, Вы писали:

ST>operator <, operator == — перегружены!

А bool operator<(const CTest& x) const перегружен ?
Обрати внимание на слово const в конце.
Re[3]: operator ()
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 04.09.02 13:09
Оценка:
Здравствуйте StasT, Вы писали:

ST>operator <, operator == — перегружены!


Тогда, плиз, описание оператора < в студию
Re[4]: Ура!!!!
От: StasT  
Дата: 04.09.02 13:12
Оценка:
Я добавил const — получилось!!!!!!
Thanx!
Re: operator ()
От: JustMe  
Дата: 04.09.02 13:15
Оценка:
Здравствуйте StasT, Вы писали:

ST>Создаю map<CTest, int> получаю ошибку:


ST>binary '<' : no operator defined which takes a left-hand operand of type 'const class CTest' (or there is no acceptable conversion).

ST>Как решить эту проблему?

А ключем в мапе должен быть именно объект класс CTest???
Тогда для класса должны быть переопределены некоторые операторы (Оператор < — один из них)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.