PDA

View Full Version : [C++] map: operator<


agente mm8
07-02-2010, 10:05
Salve a tutti, sto utilizzando una map e, al momento della compilazione, ricevo questo errore:
no match for ‘operator<’ in ‘__x < __y’
line 230, external location: /usr/include/c++/4.4/bits/stl_function.h

Utilizzo g++ sotto linux.
La mia map è dichiarata in questo modo:
map<MioEvento, void(*)()> nomeMap;
Mi serve per abbinare una funzione (che ritorna void) a un certo evento. Quando questo evento viene generato, la funzione associata viene chiamata.

Qualcuno può aiutarmi?
Grazie in anticipo.

Unrue
07-02-2010, 10:57
Mm,
hai inserito questi nel codice?


#include <map>
using namespace std;



e MioEvento è definito da qualche parte? Forse è meglio se riporti qualche riga di codice in più

Edit:
A me così compila:


#include <iostream>
#include <map>
using namespace std;

int main ()
{

map<int, void(*)()> nomeMap;

return 0;
}



Quindi sicuramente il problema è nella definizione di MioEvento

agente mm8
07-02-2010, 11:58
MioEvento lo prendo da una libreria esterna.
Naturalmente ho importato l'header <map> e quando la dichiaro uso std::map<...>.

Unrue
07-02-2010, 11:59
MioEvento lo prendo da una libreria esterna.
Naturalmente ho importato l'header <map> e quando la dichiaro uso std::map<...>.

Riporta più codice, con una sola riga è davvero difficile capire il problema..

marco.r
07-02-2010, 15:14
Salve a tutti, sto utilizzando una map e, al momento della compilazione, ricevo questo errore:
no match for ‘operator<’ in ‘__x < __y’
line 230, external location: /usr/include/c++/4.4/bits/stl_function.h

Utilizzo g++ sotto linux.
La mia map è dichiarata in questo modo:
map<MioEvento, void(*)()> nomeMap;
Mi serve per abbinare una funzione (che ritorna void) a un certo evento. Quando questo evento viene generato, la funzione associata viene chiamata.

Qualcuno può aiutarmi?
Grazie in anticipo.

Il motivo per cui non funziona e' scritto nel messaggio di errore: manca l'operator < per il tipo chiave (ovvero MioEvento), che serve alla map
per poter distinguere elementi diversi (o meglio ordinarli nell'albero r-b
sottostante).

Una volta implementato l'operatore l'errore dovrebbe sparire. In alternativa
puoi usare un nome diverso, e passarlo come terzo argomento template della map<>

agente mm8
07-02-2010, 16:51
Manca l'operator < per il tipo chiave (ovvero MioEvento)
Purtroppo non posso modificare MioEvento, in quanto fa parte di una libreria di terzi.

In alternativa puoi usare un nome diverso, e passarlo come terzo argomento template della map<>
Che intendi con un "nome diverso"?

marco.r
08-02-2010, 07:53
Purtroppo non posso modificare MioEvento, in quanto fa parte di una libreria di terzi.

Puoi implementarlo come funzione senza toccare la classe


bool operator < ( const MioEvento& x, const MioEvento& y );



Che intendi con un "nome diverso"?

Rettifico, devi usare un oggetto funzione:

struct compare
{
bool operator ()( const MioEvento& x, const MioEvento& y )
{
return ???;
}
};


int main()
{
map<MioEvento,bool,compare> myMap;

...
}