Die Koordination typedefs und structs in std :: multiset (C ++)
Frage
Ich bin kein professioneller Programmierer, so zögern Sie bitte nicht, das Offensichtliche zu erklären.
Mein Ziel ist es, einen std::multiset
Behälter zu verwenden (typedef EventMultiSet
) genannt currentEvents
eine Liste von Strukturen zu organisieren, vom Typ Event
, und die Mitglieder der Klasse Host
gelegentlich neuen Event
structs zu currentEvents
hinzufügen zu haben. Die Strukturen sollen durch eines ihrer Mitglieder, Zeit sortiert werden. Ich bin nicht sicher, wie viel von dem, was ich versuche, ist legal zu tun; die g ++ Compiler Berichte (in "Host.h") "Fehler: 'EventMultiSet' wurde nicht deklariert." Hier ist, was ich tue:
// 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;
...
Wichtige Fragen
- Wo soll ich schließen die EventMultiSet typedef?
- Sind meine EventMultiSet Zeiger offensichtlich problematisch?
- Ist die Vergleichsfunktion in meinem Ereignisse struct (in der Theorie) in Ordnung?
Vielen Dank im Voraus.
Lösung
-
Die Compiler-Fehler sind einfach, weil Ihre typedef an der falschen Stelle ist - nur main.cpp weiß davon. Es sieht aus wie Sie es wahrscheinlich in Event.h wollen, die beiden anderen sind.
-
Ich bin nicht sicher genau das, was Sie fragen - aber vielleicht möchten Sie durch Verweis übergeben nicht durch Zeiger?
-
Ich habe nichts daran zu beanstanden -. Wenn Sie die anderen Vergleiche bieten möchten (
>
,<=
, ...) zu
Andere Tipps
Da Sie Aussagen erbeten „der Hand“, eine Sache, die ich bemerkt, ist, dass man nicht #include <set>
tat, die, um für Ihre Compiler erforderlich ist zu wissen, was ein multiset
ist, oder #include <functional>
die erforderlich ist, zu wissen, was less
Mittel:
// main.cpp
#include "Event.h"
#include <set>
#include <functional>
...
typedef std::multiset< Event, std::less< Event > > EventMultiSet;
EventMultiSet currentEvents;
EventMultiSet * cePtr = ¤tEvents;