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

Wichtige Fragen

  1. Wo soll ich schließen die EventMultiSet typedef?
  2. Sind meine EventMultiSet Zeiger offensichtlich problematisch?
  3. Ist die Vergleichsfunktion in meinem Ereignisse struct (in der Theorie) in Ordnung?

Vielen Dank im Voraus.

War es hilfreich?

Lösung

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

  2. Ich bin nicht sicher genau das, was Sie fragen - aber vielleicht möchten Sie durch Verweis übergeben nicht durch Zeiger?

  3. 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 = &currentEvents;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top