Omnet 在我的班级中添加功能
Omnet++ Adding functionalities to handleMessage in my class
我有一个错误,试图在我的队列类中继承handlemessage(gatedroptailqueue),它是从droptailqueue继承的,而droptailqueue又从passivequeuebase继承。
。class INET_API GateDropTailQueue: public DropTailQueue {
private:
cMessage *msg1;
cMessage *msg2;
protected:
virtual void initialize() override;
virtual void handleMessage(cMessage *msg) override;
...
};
void GateDropTailQueue::initialize()
{
DropTailQueue::initialize();
msg1 = new cMessage("msg1"); scheduleAt(2, msg1); msg1 = nullptr;
...
}
void GateDropTailQueue::handleMessage(cMessage *msg)
{
DropTailQueue::handleMessage(msg);
if (msg == msg1) {
msg1 = new cMessage("msg1"); scheduleAt(10, msg1); msg1 = nullptr;
msg2 = new cMessage("msg2"); scheduleAt(2, msg2); msg2 = nullptr;
...
}
else if (msg == msg2) {
msg2 = new cMessage("msg2"); scheduleAt(2, msg2); msg2 = nullptr;
...
}
}
我有以下错误
模块中的错误(inet :: gatedroptailqueue) mySimulation.switch.eth [0] .Queue.queue1(ID = 33)事件#12,t = 2: 发出错误类的信号" rcvdpk"(omnetpp :: cmessage没有 从Omnetpp :: cpacket声明)。
此错误与被动标语中的handlemessage中的第一行有关
// PassiveQueueBase.cc
namespace inet {
simsignal_t PassiveQueueBase::rcvdPkSignal = registerSignal("rcvdPk");
void PassiveQueueBase::handleMessage(cMessage *msg)
{ numQueueReceived++;
emit(rcvdPkSignal, msg);
...
}
}
可能在模型的NED
文件中您有此行:
@signal[rcvdPk](type=cPacket);
这意味着rcvdPk
信号可以用cPacket
对象发射,而不是使用cMessage
。您应该做的是将msg
施放到cPacket
,例如这样:
void PassiveQueueBase::handleMessage(cMessage *msg)
{ numQueueReceived++;
cPacket * pkt = dynamic_cast<cPacket *> (msg);
if (pkt) {
emit(rcvdPkSignal, pkt);
} else {
// ... not a cPacket
}
...
}
它是通过在父式处理(cmessage * msg)上的条件来解决的
if (!msg->isSelfMessage()) { ... }
// while it didn't work using the condition
if (msg != msg1 && msg != msg2) { ... }
相关文章:
- 设计模式,以避免不必要地添加抽象函数以适应新功能
- 在大括号内添加语句会更改代码功能?
- 在 C++ 中向多态树添加功能
- Trie 查找/添加功能无法正常工作
- 简单的二进制搜索树非递归添加功能
- Omnet 在我的班级中添加功能
- 如何正确覆盖虚拟方法以添加功能
- Qthread,为qthread添加功能
- 如何打印添加功能的结果.
- 如果我希望子类向父类添加功能,我是否应该保护我的属性
- 在没有继承的情况下向c++类添加功能
- 向类及其所有子类添加功能
- 用于添加功能的继承
- 如何向派生类添加功能
- 如何强制重新运行cmake,或通过CMakeLists.txt添加功能到makefile
- 为已经存在的函数添加功能(c#, c++)
- 如何修复错误并向源文件添加功能,同时保证不会破坏某些应用程序
- 使用继承添加功能
- 链表需要帮助无法打印我的数据.想要添加功能.在 C - C++ 中
- 在OOP中向现有类添加功能