使用 omnet++ 覆盖函数

Overriding Functions with omnet++

如何覆盖 omnet++ 中包含的 class 的函数?
当我尝试像在 C++ 中那样重写该函数时出现重定义错误。

redefinition of "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()
            << "' message\n";
        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" 行或重命名 class 使其不与 AODVRouting class 名称重叠。