2016-11-26 101 views
2

我正在嘗試使用send()命令創建一個結構並將其數據發送到應用程序/ MAC層。現在我面臨的問題是send()只允許cMessage對象/指針作爲參數。這是一個讓項目停滯不前的問題。通過CMessage發送數組 - OMNET ++

事情到目前爲止,我已經試過有:

  • 從cMessage派生而來(?但如何處理數組)
  • 重載HandleCommand功能,但再次發送()繼承不允許發送陣列。

任何幫助將非常感激。謝謝!

回答

2

OMNeT++中,可以定義自己的消息。定義可以使用嵌入類型(int,double,string,...)以及自己的類型。
讓我們假設你要發送的Foo.h定義Foo一個實例:

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

#endif 

您應該創建.msg擴展名的新文件,例如TestMsg.msg

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

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

建設項目後,將創建新的C++文件(TestMsg_m.hTestMsg_m.cc)。這些文件包含從cMessage繼承的TestMsg類的定義。 TestMsg類具有所有需要的設置和獲取方法。

參考:OMNeT++ Simulation Manual, Chapter 6

+0

非常感謝。真的行。我有一個問題,但。如果我打算做一個向量而不是數組,它會給出奇怪的錯誤。我知道OMNetPP允許使用矢量,但是如何將它包含在消息中是一個我還沒有找到答案的問題。 –

+1

在'OMNeT ++'的消息定義中沒有向量的本地支持。但是,您可以使用'cplusplus'關鍵字並使用'std :: vector'聲明自己的類型,例如:'cplusplus {{0124}}}}} }}'然後在消息中:'IntVector vec;'。 –

+0

感謝它的工作,但我已經做了一個類,併成功地在一個消息中使用它。每當我嘗試在其他消息中使用它時,都會發生奇怪的重定義錯誤。我已經試過noncobject和沒有它...可能是什麼原因? –