如何在 inet 数据包定义中使用 C++ 类型(结构)

How to use a c++ type (struct) in inet packet definition

我想创建一个 inet 数据包,数据包内容需要是在消息文件外定义的 c++ 类型结构。 我之前这样做是为了定义一个从 OMNeT 中的 cMessages 派生的 .msg 文件,如下所示:

cplusplus{{
       #include "util/DataTypes/StateDataTypes.h" 
}};

struct StateWithCovariance;

message WirelessMsg
{
   StateWithCovariance VehicleLocation; 
}

现在我正在使用 simu5g 并希望发送与 inet 数据包相同的 msg 内容。我知道 inet 数据包数据结构建立在数据结构块之上。因此,我遵循了它在 inet 中是如何完成的,当我尝试创建数据包时,我不能使用上面相同的格式来定义数据包,因为 then

cplusplus{{
     #include "inet/common/INETDefs"
     #include "inet/common/packet/chunk/chunk"
}}
class WirelessAppPacket extends inet::FieldsChunk
{
   simtime_t payloadTimestamp;
   StateWithCovariance VehicleLocation;
}

不会工作并给我错误:

modules/communication/NR/App/WirelessAppPacket.msg:34: Error: 'WirelessAppPacket': unknown base class 'inet::FieldsChunk', 
available classes' (inet::StateWithCovariance:1)' ,'(omnetpp::cMessage:4)', '(omnetpp::cNamedObject:5)','(omnetpp::cObject:3)','(omnetpp::cOwnedObject:4)','(omnetpp::cPacket:4)'

如果我给它

import inet.common.INETDefs;
import inet.common.packet.chunk.Chunk;

class WirelessAppPacket extends inet::FieldsChunk
{
   simtime_t payloadTimestamp;
   StateWithCovariance VehicleLocation;
}

如果我将项目属性中的消息编译器更改为 --msg6,它不会给出关于块的任何错误,如下所示

MSGC:=$(MSGC) --msg6

但是它给我一个关于数据类型定义的错误:

modules/communication/NR/App/WirelessAppPacket.msg:28: Error: Type declarations are not needed with imports, try invoking the message compiler in legacy (4.x) mode using the --msg4 option
modules/communication/NR/App/WirelessAppPacket.msg:32: Error: unknown type 'StateWithCovariance' for field 'VehicleLocation' in 'WirelessAppPacket'

我使用的整个代码如下所示

import inet.common.INETDefs;
import inet.common.packet.chunk.Chunk;

cplusplus{{
   #include "util/DataTypes/StateDataTypes.h" 
   #include "modules/vehicle/CommunicationCoordinator.h"   
}};

struct StateWithCovariance;
class WirelessAppPacket extends inet::FieldsChunk
{
   simtime_t payloadTimestamp;
   StateWithCovariance VehicleLocation;
}

如果我将消息编译器更改为 --msg4 那么我就无法在 INET 框架中从块基 class 定义我的数据包,并且使用 --msg6 我无法使用我想要的数据类型使用。

有没有办法解决这个问题?

我使用OMNeT++ 5.6.2版,INET 4.2.2版和Simu5G 1.1.0版

解释了要做什么。基本上你需要改变行

struct StateWithCovariance;

从你的最后一个代码片段到

struct StateWithCovariance {
   @existingClass;
}

这适用于 --msg6 消息编译器,因此您仍然可以导入 INET 类。