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

Le principali domande

  1. Dove dovrei includere il typedef EventMultiSet?
  2. I miei puntatori EventMultiSet ovviamente problematico?
  3. è la funzione di confronto all'interno del mio struct evento (in teoria) va bene?

Grazie mille in anticipo.

È stato utile?

Soluzione

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

  2. Non sono sicuro esattamente quello che stai chiedendo - ma forse si vuole passare riferimento non dal puntatore?

  3. 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 = &currentEvents;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top