Ciao a tutti!
Avrei qualche problema con un programmino di questo tipo.
In pratica avrei una lista di oggetti del tipo
dove Connection è una classe da me creata, e che dovrei riempire.codice:list<Connection> connections;
Poichè vorrei evitare i valori duplicati (non ho usato i set perchè questi mi forzano un ordinamento che non desidero) dovrei fare dei controlli all'atto dell'inserimento. In particolare vorrei una funzione che mi controlli se un oggetto è già presente nella lista "connections" sulla base di un mio criterio (basato sul confronto di una stringa).
Una funzione dunque accetta due parametri: la lista che vorrei controllare e la stringa che funge da termine di paragone. Se esiste già un oggetto che contiene questa stringa in un suo attributo particolare la funzione dovrebbe restituirmi l'iteratore che punta all'oggetto in questione, altrimenti un riferimento alla fine della lista (connections.end()), che userò come termine di paragone per capire se l'elemento è presente o meno nella lista.
Qualcosa del tipo...
che poi richiamerò con...codice:list<Connection>::iterator Parser::connection_is_present(list<Connection> connections, string ip_src){ list<Connection>::iterator ret; list<Connection>::iterator it; //problema con la lista vuota for (it = connections.begin(); it != connections.end(); ++it){ if ( it->ip_src == ip_src) return it; } return ret; }
L'applicazione crasha inesorabilmente sulla if... dicendo "list iterators incompatible".codice:list<Connection>::iterator conn_it = connection_is_present(connections, rules_it->getSrc()); if ( conn_it != connections.end()){ .... }
Dove sto sbagliando ?

Rispondi quotando
