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.
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<...>.
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..
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"?
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;
...
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.