2016-11-26 6 views
2

構造体を作成し、send()コマンドを使用してアプリケーション/ MACレイヤーにデータを送信しようとしています。今私が直面している問題は、send()がパラメータとしてcMessageオブジェクト/ポインタのみを許可するということです。これはプロジェクトを止めてしまった問題です。私がこれまで試してみましたCMessageを介して配列を送信する - OMNET ++

ものがあります:(?しかし、どのように配列に対処する)

  • がcMessageから継承
  • (送信再びHandleCommand関数をオーバーロードけど)配列を送信することはできません。

本当にありがとうございます。ありがとう!

答えて

2

OMNeT++では、独自のメッセージを定義できます。定義では、埋め込み型(int、double、string、...)と独自の型を使用できます。たとえばTestMsg.msgため、

// Foo.h 
#ifndef _FOO_H 
#define _FOO_H 
class Foo { 
public: 
    int x; 
}; 

#endif 

あなたは.msg拡張子を持つ新しいファイルを作成する必要があります:
あなたはFoo.hで定義されたFooのインスタンスを送信すると仮定しましょう

// TestMsg.msg 
cplusplus {{ 
#include "Foo.h" 
}} 
class noncobject Foo; 

message TestMsg { 
    Foo oneObject; 
    Foo tab[10]; // example of fixed-size array 
} 

をプロジェクトをビルドした後、新しいC++ファイル(TestMsg_m.h、およびTestMsg_m.cc)が作成されます。これらのファイルには、cMessageを継承するTestMsgクラスの定義が含まれています。 TestMsgクラスには、必要なメソッドの設定と取得がすべて必要です。

参考:OMNeT++ Simulation Manual, Chapter 6

+0

ありがとうございます。それは実際に動作します。私は1つの問題を抱えています。私は配列の代わりにベクトルを作るつもりならば、奇妙なエラーが発生します。私はベクトルがOMNetPPで許可されていることを知っていますが、ここにメッセージに含める方法はまだ答えを見つけることができなかった質問です。 –

+1

'OMNeT ++'のメッセージ定義にベクトルのネイティブサポートはありません。しかし 'cplusplus'キーワードを使い、' std :: vector'を使って自分の型を宣言することができます: 'cplusplus {{ #include typedef std :: vector IntVector; }} 'そしてメッセージの中で:' IntVector vec; '。 –

+0

ありがとうございますが、私はクラスを作成し、それをメッセージでかなりうまく使用しています。私が他のメッセージでそれを使用しようとするたびに、奇妙なエラーが発生します。私はnoncobjectとそれなしでの両方を試みた...理由は何ができますか? –

関連する問題