質問

私はプロのプログラマーではないので、当たり前のことを遠慮せずに述べてください。

私の目標は、 std::multiset 容器 (typedef EventMultiSet) と呼ばれる currentEvents 型の構造体のリストを整理する Event, 、そしてクラスのメンバーを持つこと Host 時々新しいものを追加します Event 構造体へ currentEvents. 。構造体は、メンバーの 1 つである時間によってソートされることになっています。私がやろうとしていることのどの程度が合法なのかはわかりません。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 構造体内の比較関数は (理論上は) 大丈夫ですか?

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

役に立ちましたか?

解決

  1. コンパイラ エラーは単に typedef が間違った場所にあることが原因であり、それを知っているのは main.cpp だけです。おそらく、他の両方に含まれる Event.h にこれが必要なようです。

  2. あなたが何を尋ねているのか正確にはわかりませんが、おそらくそうしたいのでしょう 参照渡し ポインタではなく?

  3. 何も問題はありませんが、他の比較を提供することもできます (>, <=, 、 ...) あまりにも。

他のヒント

あなたが「明白な」発言を求めていたことを考えると、私が気づいた点の 1 つは、あなたはそうしなかったということです #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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top