Coordinare typedef e le strutture in std :: multiset (C ++)
Domanda
Io non sono un programmatore professionista, quindi per favore non esita ad affermare l'ovvio.
Il mio obiettivo è quello di utilizzare un contenitore std::multiset
(typedef EventMultiSet
) chiamato currentEvents
di organizzare una lista di struct, di tipo Event
, e di avere i membri della classe Host
di tanto in tanto aggiungere nuovi struct Event
a currentEvents
. Le struct dovrebbero essere ordinato da uno dei suoi membri, il tempo. Io non sono sicuro di come gran parte di quello che sto cercando di fare è legale; i rapporti g ++ compilatore (in "Host.h") "Errore: 'EventMultiSet' non è stato dichiarato." Ecco quello che sto facendo:
// Event.h
struct Event {
public:
bool operator < ( const Event & rhs ) const {
return ( time < rhs.time );
}
double time;
int eventID;
int hostID;
};
// Host.h
...
void calcLifeHist( double, EventMultiSet * ); // produces compiler error
...
void addEvent( double, int, int, EventMultiSet * ); // produces compiler error
// Host.cpp
#include "Event.h"
...
// main.cpp
#include "Event.h"
...
typedef std::multiset< Event, std::less< Event > > EventMultiSet;
EventMultiSet currentEvents;
EventMultiSet * cePtr = ¤tEvents;
...
Le principali domande
- Dove dovrei includere il typedef EventMultiSet?
- I miei puntatori EventMultiSet ovviamente problematico?
- è la funzione di confronto all'interno del mio struct evento (in teoria) va bene?
Grazie mille in anticipo.
Soluzione
-
Gli errori del compilatore sono semplicemente perché il vostro typedef è nel posto sbagliato - solo main.cpp lo sa. Sembra che probabilmente lo volete in Event.h, che entrambi gli altri includono.
-
Non sono sicuro esattamente quello che stai chiedendo - ma forse si vuole passare riferimento non dal puntatore?
-
Non vedo male niente con esso -. Anche se si potrebbe desiderare di fornire gli altri confronti (
>
,<=
, ...) troppo
Altri suggerimenti
Dato che si sollecitati dichiarazioni "dell'ovvio", una cosa che ho notato è che hai fatto non #include <set>
, che è richiesta in modo che il vostro compilatore di sapere che cosa un multiset
è, o #include <functional>
che è necessario sapere che cosa less
mezzi:
// main.cpp
#include "Event.h"
#include <set>
#include <functional>
...
typedef std::multiset< Event, std::less< Event > > EventMultiSet;
EventMultiSet currentEvents;
EventMultiSet * cePtr = ¤tEvents;