2015-01-08 1 views
0

У меня есть класс под названием «Item», и я пытаюсь вставить элемент в набор элементов.Почему компилятор говорит, что я не могу вставить элемент в std :: set <Item>?

std::set<Item>::iterator it; 
_items.insert(it, newItem); 

, но это дает мне эту странную ошибку

Error 1 error C2678: binary '<' : no operator found which takes a left-hand operand of type 'const Item' (or there is no acceptable conversion) 

Несмотря на то, что я сделал реализации этого оператора.

bool Item::operator<(Item& other) 
{ 
    return _serialNumber < other._serialNumber; 
} 

Я не понимаю, зачем мне этот оператор в этой функции.

Кто-нибудь знает, в чем проблема?

Заранее благодарен!

+3

Подсказка была при ошибке: 'const Item', ваш оператор должен принимать другие значения const ref. (Возможно, вы также должны сделать оператор const) – Borgleader

+0

Реализовать bool Item :: operator <(const Item & other) – PaulD

+1

Кроме того, ваш итератор 'it' не ссылается ни на что, но вы используете его в вызове' insert'. – PaulMcKenzie

ответ

4

Вы должны изменить определение к: -

bool Item::operator<(const Item& other) const 
         ^^^^^    ^^^^^ 
{ 
    return _serialNumber < other._serialNumber; 
} 
+0

Спасибо, но теперь это сбой ... :( –

+2

Время отладки и поднять еще один вопрос в случае, если проблема сохраняется :) – ravi

+0

Да это! ...: / –

0

"I don't see why I need this operator in this function."

Это потому, что вам нужно убедиться, этот оператор-функция который вызывается на RValue экземпляры Item класса. Это requirement из std::set (и другие классы контейнеров, где Item должен использоваться как ключ).

Смежные вопросы