如何将标准容器作为字段添加到OMNet ++消息?

问题描述 投票:0回答:1

我正在尝试创建一个简单的message definition,其中包含使用std::vector实现的字段。根据OMNet++ 5.5 manual ch. 6 sec. 8.1,这似乎很简单。

但是,我使用的是OMNet ++ 6.0pre6:由于手册已过时1,因此我无法弄清楚这样做的正确方法是什么,并且在手册中对这些更改进行了非常肤浅的介绍。 nedxml更改日志。

消息定义可以简化为the exact example in the manual,但在这种情况下,它是message而不是packet(两者都会产生相同的错误):

cplusplus {{
#include <vector>
typedef std::vector<int> IntVector;
}}

class noncobject IntVector;

message SimpleMsg {
    int this_thing;
    int that_thing;
    IntVector these_things;
}

以下错误是由消息到C ++的编译器opp_msgtool提供的:

SimpleMsg.msg:6: Error: Type declarations are not needed with imports, try invoking the message compiler in legacy (4.x) mode using the --msg4 option
SimpleMsg.msg:11: Error: unknown type 'IntVector' for field 'these_things' in 'SimpleMsg'

考虑导入不需要类型声明可能是从OMNet 5.x到6.x的更改的简单摘要,我着手删除class noncobject IntVector。在消除第一个错误的同时,它仍然会产生Error: unknown type 'IntVector' for field 'these_things' in 'SimpleMsg'

想法?有什么建议吗?有教训吗?

EDIT:尤其是发现there are some notes in the nedxml changelog referring to changes between 4.0-5.x and 6.0,但如何理想地使用它尚不清楚。


1当然至少不完全适用于OMNet ++ 6.0。

c++ omnet++
1个回答
3
投票

应该是这样的:

nedxml

另一个“解决方案”是强制消息编译器兼容4.x(旧模式)。只需在makefrag文件中添加以下行

cplusplus {{
#include <vector>
typedef std::vector<int> IntVector;
}}

class IntVector {
    @existingClass;
}

message SimpleMsg {
    int this;
    int that;
    IntVector these;
}

但是,迟早应转换代码。如果您希望代码同时使用OMNeT ++ 5.5和6.0进行编译,则绝对应该明确指定MSG编译器版本。可以兼容4.x或6.x。

© www.soinside.com 2019 - 2024. All rights reserved.