0

私はプロのプログラマーではないので、遠慮なく明白に述べてください。

私の目標は、呼び出されたstd::multisetコンテナ( )を使用して、型の構造体のリストを整理し、クラスのメンバーに新しい構造体を時々追加させることです。構造体は、メンバーの1人である時間によってソートされることになっています。私がやろうとしていることのどれだけが合法であるかはわかりません。g ++コンパイラは(「Host.h」で)「エラー:'EventMultiSet'は宣言されていません」と報告します。これが私がしていることです:typedef EventMultiSetcurrentEventsEventHostEventcurrentEvents

// 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. 私のイベント構造体内の比較関数は(理論的には)大丈夫ですか?

事前にどうもありがとうございました。

4

2 に答える 2

2
  1. コンパイラエラーは、typedefが間違った場所にあるために発生します。main.cppだけがそれを認識しています。他の両方に含まれているEvent.hでおそらく必要なようです。

  2. あなたが何を求めているのか正確にはわかりませんが、ポインタではなく参照で渡したいのではないでしょうか。

  3. >他の比較( 、、<=...)も提供することをお勧めしますが、問題はありません。

于 2010-04-12T18:38:30.867 に答える
1

あなたが「明白な」ステートメントを要求したことを考えると、私が気づいたことの 1 つは#include <set>、コンパイラーが a が何であるかを知るために必要な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;
于 2010-04-12T21:10:04.230 に答える