Координирование typedefs и структур в std :: multiset (C ++) - PullRequest
0 голосов
/ 12 апреля 2010

Я не профессиональный программист, поэтому, пожалуйста, не стесняйтесь заявлять очевидное.

Моя цель - использовать контейнер std::multiset (typedef EventMultiSet) с именем currentEvents, чтобы организовать список структур типа Event и чтобы члены класса Host иногда добавляли новые Event структурирует до currentEvents. Структуры должны быть отсортированы по времени одним из их членов. Я не уверен, насколько многое из того, что я пытаюсь сделать, является законным; Компилятор g ++ сообщает (в «Host.h») «ошибка: EventMultiSet не был объявлен». Вот что я делаю:

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

Основные вопросы

  1. Где я должен включить определение типа EventMultiSet?
  2. Мои указатели EventMultiSet явно проблематичны?
  3. В порядке ли функция сравнения в моей структуре Event (теоретически)?

Заранее большое спасибо.

Ответы [ 2 ]

2 голосов
/ 12 апреля 2010
  1. Ошибки компилятора просто потому, что ваш typedef находится не в том месте - об этом знает только main.cpp. Похоже, что вы, вероятно, хотите это в Event.h, который включает оба остальных.

  2. Я не совсем уверен, что вы спрашиваете - но, возможно, вы хотите передать по ссылке не по указателю?

  3. Я не вижу в этом ничего плохого - хотя, возможно, вы захотите предоставить и другие сравнения (>, <=, ...).

1 голос
/ 13 апреля 2010

Учитывая, что вы требовали утверждений "очевидного", я заметил одну вещь: вы не #include <set>, что требуется для того, чтобы ваш компилятор знал, что такое multiset, или #include <functional>, который необходимо знать, что означает less:

// main.cpp
#include "Event.h"
#include <set>
#include <functional>
...
typedef std::multiset< Event, std::less< Event > > EventMultiSet;
EventMultiSet currentEvents;
EventMultiSet * cePtr = &currentEvents;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...