Omnet ++ベースのコンテナcQueue
を優先キューとして使用したいと考えています。 -
それはAPIを参照して、マニュアルで説明されたように、次のように私はそれを
を定義する必要があります
cQueue queue("Name of queue", someCompareFunc)
Omnet ++の優先キューとしてcQueueを実装する方法は?
someCompareFunc
としてomnetによって定義されるタイプCompareFunc
のものである:
typedef int (*CompareFunc)(cObject *a, cObject *b);
私はこの比較関数を実装したかったのですが、コンパイルするものを書くことはできませんでした。
私は少し時間をかけて関数ポインタでは動作しなかったことを認めますが、小さな研究の後、私は理解し、Eclipse IDE(C++)でいくつかのテストコードを書いたと思います。
私はこのコードをsimpleModule
file.ccに書き込もうとしています。
したがって、私はヘッダファイルで "通常の方法"で宣言しています.ccファイルでは、関数名の前にモジュール名に "::"を追加する必要があります。
だから私は宣言した私のヘッダファイル内:
int compareByNodes (cObject *a, cObject *b);
との.ccファイルに:
cQueue queue("job_Buffer",&compareByNodes);
しかし、私は受け取っ:
int JobScheduler::compareByNodes (cObject *a, cObject *b){
return 1;
};
cQueueを定義するための私の最初の試みでしたコンパイルエラー: 'compareByNodes'はこのスコープで宣言されていません。
私は、それが行方不明の 'JobScheduler ::'と何か関係があると思った。
2回目の試行された:
CompareFunc tmp = (CompareFunc)&JobScheduler::compareByNodes;
cQueue queue("job_Buffer",tmp);
この時、私のエラーがあった。このラインで
「複数のマーカー
- この文脈の中
- 「int型(jobschedulerの:: )からの変換(omnetpp: :のcObject、omnetpp ::のcObject *)omnetpp」に ':: CompareFunc {別名INT() (omnetpp ::のcObject、omnetpp ::のcObject *)}' [-Wpmf-コンバージョン」
'アンパサンド'の後にかっこを追加しても問題ありませんでした。
私はOmnetのこの方法を使うことができれば本当に助けになると思います。それはソフトウェアの「機能」が明確に定義されているからです。
私はまた、これらの件名をgoogleにしようとしました、グーグルグループのセクションで検索し、何の答えも見つかりませんでした。
助けていただければ幸いです
ありがとうございます!この解決策は機能します。また、いくつかの機能で使用されているため、キューはグローバル にする必要がありました。そこで私はグローバルなcQueue *を定義し、initialize()関数の中で 'new cQueue(" name "、method)'に割り当てられた を定義しました。それがうまくいくことを願って –