Я начинаю с OMNeT ++ и C ++, пройдя учебник по TicToc.
Теперь я хотел бы внести изменения в поведение одного из подмодулей Tic или Toc, в частности в handleMessage ().
В настоящее время сообщения обрабатываются путем пересылки полученного сообщения другому подмодулю без каких-либо манипуляций с сообщением. Теперь я хотел бы изменить это так, чтобы Tic проверял строку входящего сообщения, и если значение было «String 1», то if сгенерирует новое сообщение со строковым значением «String 2» и отправит его в Toc.
Однако, когда я делаю это, я получаю сообщение об ошибке «Сравнение между различными типами указателей» cMessage «и» const char * «не содержит приведение.
Это код:
void Tic::handleMessage(cMessage *msg)
{
if (msg == "String 1")
{
cMessage *msg2 = new cMessage ("String 2");
send(msg2,"out");
}
}
Любая помощь приветствуется. Благодарю.
Я нашел решение:
if (strcmp("String 1", msg->getName())==0)
{}
Мы очень мало знаем о cMessage
, но, возможно, вы имели в виду
if (*msg == "String 1")
Потому что это сравнило бы значение указателя на объект cMessage с помощью msg
(указатель) на строковое литеральное значение.
Как вы это сделали, вы пытаетесь сравнить указатель на строковый литерал (который распадается на char const*
в этом контексте), что не имеет смысла (см. также Как сравнить указатели?).
Обновить После прочтения здесь http://www.omnetpp.org/doc/omnetpp/api/index.html не похоже, что вышеперечисленное сработает.
Фактически, вы можете захотеть прочитать некоторые свойства элемента (информация, подробная информация, инкапсулированный пакет cPacket и т. Д.), Чтобы просмотреть сообщение.