【问题标题】:Sending Array through CMessage - OMNET++通过 CMessage 发送数组 - OMNET++
【发布时间】:2021-01-29 02:12:58
【问题描述】:

我正在尝试创建一个结构并使用 send() 命令将其数据发送到应用程序/MAC 层。现在我面临的问题是 send() 只允许 cMessage 对象/指针作为参数。这是一个使项目停滞不前的问题。

到目前为止我尝试过的事情是:

  • 继承自cMessage(但是如何处理数组?)
  • 重载 HandleCommand 函数,但 send() 再次不允许发送数组。

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: c++ arrays omnet++


    【解决方案1】:

    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 类具有所有需要的 set 和 get 方法。

    参考:OMNeT++ Simulation Manual, Chapter 6

    【讨论】:

    • 非常感谢。真的行。我有一个问题。如果我打算制作一个向量而不是数组,它会给出奇怪的错误。我知道向量在 OMNetPP 中是允许的,但是如何在消息中包含它是一个我还没有找到答案的问题。
    • OMNeT++ 中的消息定义中没有对向量的原生支持。但是您可以使用cplusplus 关键字并使用std::vector 声明自己的类型,例如:cplusplus {{ #include <vector> typedef std::vector<int> IntVector; }} 然后在消息中:IntVector vec;
    • 谢谢它的工作,但我已经做了一个类并在消息中使用它非常成功。每当我尝试在其他消息中使用它时 - 都会出现一个奇怪的重新定义错误。我已经尝试过 noncobject 和没有它...可能是什么原因?
    • 我在原始答案中省略了Foo.h 中的#ifndef 指令。现在我的答案已更新,Foo.h 包含 #ifndef - 它可以防止重新定义一个类。
    • 显然在 OMNet++ 中发生了一些变化,这个解决方案不再起作用。我在class noncobject Foo; 线上收到错误Type declarations are not needed with imports, try invoking the message compiler in legacy (4.x) mode using the --msg4 option。但是,如果没有这条线,我仍然会得到unknown type 'Foo'。有什么建议么?我正在使用 OMNet++ 5.5。 OMNet++ 文档尚未更新。
    【解决方案2】:

    这是对我有用的实现:

    namespace inet;
    
    struct NodeM
    {
    int type;
    string description;
    double coords[3];
    };
    // TODO generated message class
    //
    message Signal extends cMessage {
       NodeM Result[500];
       int sizeRes;
      NodeM RedQ[500];
      int sizeRed;
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2013-04-02
      相关资源
      最近更新 更多