用omnet++覆盖函数

Overriding Functions with omnet++

本文关键字:函数 覆盖 omnet++      更新时间:2023-10-16

如何从omnet++中包含的类重写函数?
当我尝试像在c++中那样重写函数时,会得到一个重定义错误。

重新定义"handleMessage(cMessage *msg)"

当前代码:

#include "MalAODVRouter.h"
#include "AODVRouting.cc"
#include "AODVRouting.h"
Define_Module(MalAODVRouter);
void AODVRouting::handleMessage(cMessage *msg) // Error here
{
    //-----------------------------------------------------Added to Simulate COPS
        std::string currentMsg=msg->getName();
            if(BF->CheckBloom(currentMsg)==1)
                bubble("Replayed!!");
            else
                {
                    BF->AddToBloom(currentMsg);
                    bubble("Legit Packet");
                    std::cout<<"Legitimate. Packet is added to the Bloom Filter.n";
                }
     //-----------------------------------------------------------------------------
    if (!isOperational) {
        if (msg->isSelfMessage())
            throw cRuntimeError("Model error: self msg '%s' received when isOperational "
                "is false", msg->getName());
        EV_ERROR << "Application is turned off, dropping '" << msg->getName()
            << "' messagen";
        delete msg;
    }
    if (msg->isSelfMessage()) {
        if (dynamic_cast<WaitForRREP *>(msg))
            handleWaitForRREP((WaitForRREP *)msg);
        else if (msg == helloMsgTimer)
            sendHelloMessagesIfNeeded();
        else if (msg == expungeTimer)
            expungeRoutes();
        else if (msg == counterTimer) {
            rreqCount = rerrCount = 0;
            scheduleAt(simTime() + 1, counterTimer);
        }
        else if (msg == rrepAckTimer)
            handleRREPACKTimer();
        else if (msg == blacklistTimer)
            handleBlackListTimer();
        else
            throw cRuntimeError("Unknown self message");
    }
    else {
        UDPPacket *udpPacket = dynamic_cast<UDPPacket *>(msg);
        AODVControlPacket *ctrlPacket = check_and_cast<AODVControlPacket *>
            (udpPacket->decapsulate());
        IPv4ControlInfo *udpProtocolCtrlInfo = dynamic_cast<IPv4ControlInfo *>
            (udpPacket->getControlInfo());
        ASSERT(udpProtocolCtrlInfo != NULL);
        IPv4Address sourceAddr = udpProtocolCtrlInfo->getSrcAddr();
        unsigned int arrivalPacketTTL = udpProtocolCtrlInfo->getTimeToLive();
        switch (ctrlPacket->getPacketType()) {
            case RREQ:
                handleRREQ(check_and_cast<AODVRREQ *>(ctrlPacket), sourceAddr,
                    arrivalPacketTTL);
                break;
            case RREP:
                handleRREP(check_and_cast<AODVRREP *>(ctrlPacket), sourceAddr);
                break;
            case RERR:
                handleRERR(check_and_cast<AODVRERR *>(ctrlPacket), sourceAddr);
                break;
            case RREPACK:
                handleRREPACK(check_and_cast<AODVRREPACK *>(ctrlPacket), sourceAddr);
                break;
            default:
                throw cRuntimeError("AODV Control Packet arrived with undefined packet "
                    "type: %d", ctrlPacket->getPacketType());
        }
        delete udpPacket;
    }
}

您有两个版本的AODVRouting::handleMessage(cMessage *msg)函数。一个在AODVRouting。cc来自#include "AODVRouting.cc"和您当前文件中的一个,您已经粘贴了代码,但我们不知道其名称。

从当前文件中删除#include "AODVRouting.cc"行或重命名类,使其不与AODVRouting类名称重叠。