Как переопределить функцию из включенного класса в 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()
<< "' 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"
строка из вашего текущего файла или переименуйте ваш класс, чтобы он не перекрывался с AODVRouting
имя класса