omnet++中聚合器模块出现消息接收错误



嘿,伙计们,我有这个代码(Aggregator.cc(,它应该接收从Temperature.cc和Heartrate.cc发送的消息,并将它们连接在一起,但它没有这样做,请帮忙。在aggregator.cc中,它一直告诉我tmsg和hmasg没有在作用域中定义。聚合器不是应该已经收到消息了吗。

温度.cc

#include "Temperature.h"
Define_Module(Temperature);
void Temperature::initialize()
{
// TODO - Generated method body
cMessage *tmsg = new cMessage("hi");
send(tmsg,"temperatured");
}
void Temperature::handleMessage(cMessage *msg)
{
// TODO - Generated method body
}

心率.cc

#include "Heartrate.h"
Define_Module(Heartrate);
void Heartrate::initialize()
{
// TODO - Generated method body
cMessage *hmsg = new cMessage("hello");
send(hmsg,"heartrateexit");
}
void Heartrate::handleMessage(cMessage *msg)
{
// TODO - Generated method body
}

聚合器.cc

#include "Aggregator.h"
#include "Temperature.h"
#include "Heartrate.h"
Define_Module(Aggregator);
void Aggregator::initialize()
{
// TODO - Generated method body
}
void Aggregator::handleMessage(cMessage *msg)
{
// TODO - Generated method body

cPacket *data = new cPacket("data");
data ->addPar(tmsg); // added parameter of type cMessage
data ->addPar(hmsg); // added parameter of type cMessage
data->setByteLength(20);
cPacket *udp = new cPacket("data1"); // subclassed from cPacket
udp->setByteLength(30);
udp->encapsulate(data);
EV << udp->getByteLength(); 
EV << udp;
cPacket *payload = udp->decapsulate();
EV << payload;
}

network.ned

network Network
{
submodules:
aggregator: Aggregator {
@display("p=128,147");
}
heartrate: Heartrate {
@display("p=40,112");
}
temperature: Temperature {
@display("p=40,173");
}
connections:
temperature.tempexit --> aggregator.data;
heartrate.heartrateexit --> aggregator.data1;
}  

您正试图从另一个方法访问局部变量。tmsghmsg分别定义在Temperature::initializeHeartrate::initialize的局部范围内。

您需要在这些消息的有效负载中添加一些内容,这样,当您在Aggregator::handleMessage(cMessage *msg)收到一个消息时,就可以知道msg参数是来自Temperature还是来自Heartrate

此外,在Temperature::initialize中,门的名称与.ned文件中的名称不匹配。

最新更新