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 = &currentEvents;
...

Las principales preguntas

  1. ¿Dónde debo incluir el typedef EventMultiSet?
  2. ¿Son mis punteros EventMultiSet obviamente problemático?
  3. ¿Es la función de comparación dentro de mi estructura de eventos (en teoría) de acuerdo?

Muchas gracias de antemano.

¿Fue útil?

Solución

  1. 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.

  2. No estoy seguro exactamente lo que está pidiendo - pero posiblemente te quiero el paso por referencia no por puntero?

  3. 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 = &currentEvents;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top