Почему я получаю эту ошибку несовместимого типа в OMNeT ?

#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 , или вы утечете.