0

我不是专业的程序员,所以请不要犹豫,说明显而易见的。

我的目标是使用一个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 typedef?
  2. 我的 EventMultiSet 指针明显有问题吗?
  3. 我的 Event 结构中的比较函数(理论上)可以吗?

非常感谢您提前。

4

2 回答 2

2
  1. 编译器错误仅仅是因为您的 typedef 位于错误的位置 - 只有 main.cpp 知道它。看起来您可能想要在 Event.h 中使用它,其他两个都包含它。

  2. 我不确定你到底在问什么 - 但可能你想通过引用而不是指针传递?

  3. 我看不出它有什么问题——尽管您可能也想提供其他比较 ( >, <=, ...)。

于 2010-04-12T18:38:30.867 回答
1

鉴于您征求了“显而易见的”陈述,我注意到的一件事是您没有#include <set>,这是编译器知道 amultiset是什么所必需的,或者#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;
于 2010-04-12T21:10:04.230 回答