【问题标题】:Why do I get this Incompatible Type error in OMNeT++?为什么在 OMNeT++ 中会出现此类型不兼容的错误?
【发布时间】:2020-11-13 16:16:00
【问题描述】:

这是错误:

错误:从不兼容的类型“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");
}

【问题讨论】:

    标签: c++ omnet++


    【解决方案1】:

    这个函数应该返回一个指针,否则它会泄漏内存

    cMessage* Computer::createMessage() {
        cMessage *msg = new cMessage ("HELLO");
    
        return *msg;
    }
    

    这将修复您在此作业中提到的错误

    *msg = *createMessage();
    

    这只是

    msg = createMessage();
    

    记住当你完成delete msg 否则你会泄露它。

    【讨论】:

      猜你喜欢
      • 2019-12-20
      • 2017-11-30
      • 2014-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 2012-02-07
      相关资源
      最近更新 更多