Omnet++ 如何在OMNeT++;?

Omnet++ 如何在OMNeT++;?,omnet++,Omnet++,我需要帮助将cMessage转换为cPacket类型的MsgData My MsgData是我创建的邮件: packet MsgData { string origem; int cont; double payload; double timestamp; } 我使用了static_cast函数,但它不起作用。我试着使用dynamic_cast,但效果不太好 我的代码: void UdpTrafficRedirect::retransmitDataMessa

我需要帮助将cMessage转换为cPacket类型的MsgData

My MsgData是我创建的邮件:

packet MsgData {
     string origem;
    int cont;
    double payload;
    double timestamp;
}
我使用了static_cast函数,但它不起作用。我试着使用dynamic_cast,但效果不太好

我的代码:

void UdpTrafficRedirect::retransmitDataMessage(cMessage *msg) {
     ASSERT(check_and_cast<MsgData *>(msg));
     MsgData *trafficMsg = static_cast<MsgData *>(msg);
}
void UdpTrafficRedirect::重新传输数据消息(cMessage*msg){
断言(检查和转换(msg));
MsgData*trafficMsg=静态广播(msg);
}
有人知道我怎么做吗


谢谢

您应该尝试直接使用check_cast(),如果您的数据包不是预期的类型,它将生成一个错误,就像ASSERT一样

void UdpTrafficRedirect::retransmitDataMessage(cMessage *msg) {
     MsgData *trafficMsg = check_and_cast<MsgData *>(msg);
}
void UdpTrafficRedirect::重新传输数据消息(cMessage*msg){
MsgData*trafficMsg=检查和强制转换(msg);
}

断言
是不必要的,因为
检查和强制转换
实际上也是这样做的。但是,我建议使用
dynamic\u cast
进行额外的检查

void UdpTrafficRedirect::retransmitDataMessage(cMessage *msg) {
    if (dynamic_cast<MsgData *>(msg)) {
        MsgData  * trafficMsg = check_and_cast<MsgData *>(msg);
        int a = trafficMsg->getCont();
    } else {
        EV << "Message " << msg << " is not a MsgData packet" << endl;
        // other checking of msg
    }
}
void UdpTrafficRedirect::重新传输数据消息(cMessage*msg){
if(动态_cast(msg)){
MsgData*trafficMsg=检查和强制转换(msg);
int a=trafficMsg->getCont();
}否则{

EV“不工作”是什么意思?不编译或出现运行时错误或无法识别您的消息?您能否提供一些日志或代码输出?当发送第一个数据时,模拟停止,窗口自动关闭,并显示错误消息:“模拟遇到问题”和错误详细信息:“已完成,但出现错误”。仅此而已!您是否尝试调试代码?