2010-06-26 3 views
1

я следующий код:«Нет функции соответствия» -ошибка при попытке вставить к множеству (C++)

class asd { 
    public: 
    int b; 
    asd() { b = rand() % 10; } 
    bool operator<(asd &other) { return b < other.b; } 
}; 

int main() { 
    asd * c; c = new asd(); 
    set <asd> uaua; 
    uaua.insert(c); 
} 

Но при запуске его, я получаю эту ошибку:

main.cpp|36|error: no matching function for call to ‘std::set<asd, std::less<asd>, std::allocator<asd> >::insert(asd*&)’|

Я использую g ++ 4.4.3

Может кто-нибудь, пожалуйста, скажите мне, где я иду не так? Я пытался взломать это на некоторое время, но, похоже, не может найти решение. Спасибо

+1

Не связанный с вопросом: вы должны реализовать 'operator <' как свободную функцию, если это возможно, и если она реализована как метод (это правило справедливо для всех других методов), оно должно быть постоянным, так как оно не изменяет объект на который он применяет. –

ответ

4

У вас есть набор asd, и вы пытаетесь добавить указатель.

Использование:

asd c; 
set <asd> uaua; 
uaua.insert(c); 
+0

Ахх, мне так глупо. Спасибо. – tsiki

+0

+1, вы также можете использовать конструкцию на месте: 'set uaua; uaua.insert (asd()); –

0

Попробуйте объявить set<asd*> вместо просто set<asd>.

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