我正在尝试创建一个简单的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。
应该是这样的:
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。