La coordinación de typedefs y estructuras en std :: multiset (C ++)
Pregunta
No soy un programador profesional, por lo que no duda en afirmar lo obvio.
Mi objetivo es utilizar un recipiente std::multiset
(typedef EventMultiSet
) currentEvents
llamado para organizar una lista de estructuras, de tipo Event
, y que los miembros de la clase Host
ocasionalmente añaden nuevas estructuras Event
a currentEvents
. Las estructuras se supone que deben ser ordenados por uno de sus miembros, el tiempo. No estoy seguro de cuánto de lo que yo estoy tratando de hacer es legal; los informes ++ compilador g (en "Host.h") "error: 'EventMultiSet' no se ha declarado." Esto es lo que estoy haciendo:
// 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;
...
Las principales preguntas
- ¿Dónde debo incluir el typedef EventMultiSet?
- ¿Son mis punteros EventMultiSet obviamente problemático?
- ¿Es la función de comparación dentro de mi estructura de eventos (en teoría) de acuerdo?
Muchas gracias de antemano.
Solución
-
Los errores de compilación son simplemente porque su typedef se encuentra en el lugar equivocado - sólo se main.cpp sabe sobre él. Parece que es probable que desee en Event.h, que ambos de los otros incluyen.
-
No estoy seguro exactamente lo que está pidiendo - pero posiblemente te quiero el paso por referencia no por puntero?
-
No veo mal nada con ella -. Aunque es posible que desee dar a las otras comparaciones (
>
,<=
, ...) también
Otros consejos
Dado que solicited declaraciones "de lo obvio," una cosa que he notado es que no lo hizo #include <set>
, que se requiere para que su compilador para saber qué es un multiset
es, o #include <functional>
que se requiere saber qué less
medios:
// main.cpp
#include "Event.h"
#include <set>
#include <functional>
...
typedef std::multiset< Event, std::less< Event > > EventMultiSet;
EventMultiSet currentEvents;
EventMultiSet * cePtr = ¤tEvents;