La coordination typedefs et struct dans std :: multiset (C ++)
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 = ¤tEvents;
...
Les grandes questions
- Où devrais-je inclure le typedef EventMultiSet?
- sont mes pointeurs EventMultiSet évidemment problématique?
- La fonction de comparaison dans mon struct événement (en théorie) d'accord?
Merci beaucoup à l'avance.
La solution
-
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.
-
Je ne sais pas exactement ce que vous demandez - mais peut-être que vous voulez passer par référence non par pointeur?
-
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 = ¤tEvents;