用omnet++覆盖函数
Overriding Functions with omnet++
如何从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
类名称重叠。
相关文章:
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 如何使用用户定义的函数覆盖 C lib 函数,如 _sbrk?
- 函数覆盖有哪些用例?
- 在子类函数覆盖中省略具有默认值的参数
- C++ 成员变量被非成员函数覆盖
- 用现有函数覆盖虚拟函数
- 函数覆盖是否由编译器自动完成
- 结构被库函数覆盖
- 当在Python中定义__str__时,如何将C 的标准全局函数覆盖
- C++类是否解决函数覆盖问题
- 用私有基函数覆盖公共虚拟函数
- 优先级队列中复制构造函数覆盖的值
- 虚拟函数覆盖预期错误
- C++中的函数覆盖无需"虚拟"即可工作
- C++虚拟函数覆盖
- 如何用非虚拟函数覆盖虚拟函数
- 基成员函数的所有重载是否可以被单个模板化成员函数覆盖和转发到
- C++继承函数覆盖
- 纯虚函数覆盖虚函数
- 引用项目的Qt-main()函数覆盖实际项目的main()