std::multiset での typedef と構造体の調整 (C++)
質問
私はプロのプログラマーではないので、当たり前のことを遠慮せずに述べてください。
私の目標は、 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 = ¤tEvents;
...
主な質問
- EventMultiSet typedef はどこに含めればよいですか?
- 私の EventMultiSet ポインターには明らかに問題がありますか?
- Event 構造体内の比較関数は (理論上は) 大丈夫ですか?
事前にどうもありがとうございました。
解決
コンパイラ エラーは単に typedef が間違った場所にあることが原因であり、それを知っているのは main.cpp だけです。おそらく、他の両方に含まれる Event.h にこれが必要なようです。
あなたが何を尋ねているのか正確にはわかりませんが、おそらくそうしたいのでしょう 参照渡し ポインタではなく?
何も問題はありませんが、他の比較を提供することもできます (
>
,<=
, 、 ...) あまりにも。
他のヒント
あなたが「明白な」発言を求めていたことを考えると、私が気づいた点の 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 = ¤tEvents;