Question

Je ne suis pas un programmeur professionnel, alors s'il vous plaît ne pas hésiter à l'évidence.

Mon but est d'utiliser un conteneur de std::multiset (de typedef EventMultiSet) appelé currentEvents d'organiser une liste de struct, de type Event, et d'avoir des membres de Host de classe à l'occasion d'ajouter de nouvelles Event struct à currentEvents. Les struct sont censés être triés par un de leurs membres, le temps. Je ne sais pas à quel point ce que je suis en train de faire est légale; les rapports g ++ du compilateur (dans « Host.h ») « erreur: « EventMultiSet » n'a pas été déclarée. » Voici ce que je fais:

// 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;
...

Les grandes questions

  1. Où devrais-je inclure le typedef EventMultiSet?
  2. sont mes pointeurs EventMultiSet évidemment problématique?
  3. La fonction de comparaison dans mon struct événement (en théorie) d'accord?

Merci beaucoup à l'avance.

Était-ce utile?

La solution

  1. Les erreurs du compilateur sont tout simplement parce que votre typedef est au mauvais endroit - que main.cpp sait. On dirait que vous voulez probablement dans Event.h, dont les deux autres comprennent.

  2. Je ne sais pas exactement ce que vous demandez - mais peut-être que vous voulez passer par référence non par pointeur?

  3. Je ne vois rien de mal avec elle -. Si vous pouvez fournir les autres comparaisons (>, <=, ...) trop

Autres conseils

Étant donné que vous avez sollicité des déclarations « de l'évidence, » une chose que je remarque est que vous ne l'avez pas #include <set>, qui est nécessaire pour que votre compilateur pour savoir ce qu'est un multiset est ou #include <functional> qui est nécessaire pour savoir ce que less moyen:

// main.cpp
#include "Event.h"
#include <set>
#include <functional>
...
typedef std::multiset< Event, std::less< Event > > EventMultiSet;
EventMultiSet currentEvents;
EventMultiSet * cePtr = &currentEvents;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top