Как добавить стандартный контейнер в качестве поля в сообщение OMNet ++? - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь создать простое определение сообщения , которое содержит поле, реализованное с использованием std::vector. Согласно инструкции OMNet ++ 5.5, гл. 6 сэ c. 8.1 , это на первый взгляд просто.

Однако я использую OMNet ++ 6.0pre6: я не могу понять, как это правильно сделать, поскольку руководство устарело 1 , и изменения очень поверхностно упоминаются в nedxml changelog.

Определение сообщения можно свести к точному примеру в руководстве , но в в данном случае это message, а не packet (либо выдает ту же ошибку):

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

class noncobject IntVector;

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

Следующие ошибки были предоставлены opp_msgtool, транспортом сообщений на C ++:

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'

Мышление объявления типов не нужны при импорте может быть простой сводкой изменений от O MNet 5.x до 6.x, я приступил к удалению class noncobject IntVector. Хотя он удаляет первую ошибку, он все равно дает Error: unknown type 'IntVector' for field 'these_things' in 'SimpleMsg'.

Идеи? Предложения? Уроки, которые нужно иметь?

РЕДАКТИРОВАТЬ : В частности, обнаружено, что в журнале изменений nedxml есть некоторые примечания, относящиеся к изменениям между 4.0-5.x и 6.0 , но как в идеале использовать это менее понятно.


1 Конечно, не совсем применимо к OMNet ++ 6.0, по крайней мере.

1 Ответ

3 голосов
/ 17 января 2020

Это должно быть примерно так:

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

class IntVector {
    @existingClass;
}

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

Альтернативное «решение» - принудительно заставить компилятор сообщений работать в 4.x (старый режим). Просто добавьте следующую строку в файл makefrag

MSGC:=$(MSGC) --msg4

Однако рано или поздно вы должны преобразовать свой код. Если вы хотите, чтобы ваш код компилировался как с OMNeT ++ 5.5, так и с 6.0, то вам обязательно следует явно указать версию компилятора MSG. Либо быть 4.x или 6.x совместимым.

...