#c #omnet
#c #omnet
Вопрос:
Это ошибка:
ошибка: присвоение ‘omnetpp:: cMessage *’ из несовместимого типа ‘omnetpp:: cMessage»
Это мой код:
#include "computer.h"
Define_Module(Computer);
void Computer::initialize() {
counter = 0;
limit = 10;
if (strcmp ("c1", getName())==0) {
simtime_t F_delay = par ("F_delay");
EV<<"Start Sending== n";
*msg = *createMessage();
scheduleAt(simTime() F_delay, *msg);
}
}
Computer::Computer() {
my_msg = nullptr;
}
Computer::~Computer() {
cancelAndDelete(my_msg);
}
void Computer::handleMessage(cMessage *msg) {
if(msg->isSelfMessage()) {
send (msg,"out");
}
else {
counter ;
if (counter == limit) {
EV<<"Limit is expired n";
delete msg;
}
else {
EV << " my name "<< getName()<< " n";
EV << "counter = "<< counter << " n";
simtime_t delay = par("delay");
scheduleAt(simTime() delay,msg);
EV << "sending again "<<" n";
}
}
}
cMessage Computer::createMessage() {
cMessage *msg = new cMessage ("HELLO");
return *msg;
}
void Computer::sendCopyOf(cMessage *msg) {
cMessage *copy= (cMessage *)msg->dup();
send (copy ,"out");
}
Ответ №1:
Эта функция должна возвращать указатель, в противном случае происходит утечка памяти
cMessage* Computer::createMessage() {
cMessage *msg = new cMessage ("HELLO");
return *msg;
}
Это исправит ошибку, о которой вы упоминали во время этого назначения
*msg = *createMessage();
что может быть просто
msg = createMessage();
и помните, когда вы закончите delete msg
, или вы утечете.