微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为调用错误修复不匹配的函数,并且在此作用域错误中未声明''

如何解决如何为调用错误修复不匹配的函数,并且在此作用域错误中未声明''

我正在尝试创建一个新的UDP应用程序,通过该应用程序我可以控制生成数据包的过程和发送数据包的过程,即我具有用于生成数据包和发送间隔的单独参数。

运行代码时,出现以下错误

inet / applications / udpapp / UdpOwnApp.cc:134:29:错误:没有匹配项 调用omnetpp :: cQueue :: insert(const inet :: IntrusivePtrinet :: ApplicationPacket&)’ queue.insert(有效载荷); ^ inet / applications / udpapp / UdpOwnApp.cc:157:15:错误:“有效载荷”不是 在此范围内声明 queue.pop(有效载荷); ^ ~~~~~~

代码块如下:

void UdpOwnApp::generatePacket()
{
        const auto& payload = makeShared<ApplicationPacket>();
        payload->setChunkLength(B(par("messageLength")));
        payload->setSequenceNumber(numGenerate);
        payload->addTag<CreationTiMetag>()->setCreationTime(simTime());
        queue.insert(payload);
        simtime_t d = simTime() + par("generateInterval");
        if (stopTime < SIMTIME_ZERO || d < stopTime) {
            selfMsg->setKind(GENERATE);
            scheduleAt(d,selfMsg);
        }
        else {
            selfMsg->setKind(STOP);
            scheduleAt(stopTime,selfMsg);
        }
}
void UdpOwnApp::sendPacket()
{
    std::ostringstream str;
    str << packetName << "-" << numSent;
    Packet *packet = new Packet(str.str().c_str());
    if(dontFragment)
        packet->addTag<FragmentationReq>()->setDontFragment(true);
    queue.pop(payload);
    packet->insertAtBack(payload); 
    L3Address destAddr = chooseDestAddr();
    emit(packetSentSignal,packet);
    socket.sendTo(packet,destAddr,destPort);
    numSent++;
}

有人会建议代码是否正确以及如何解决错误吗?

谢谢

解决方法

insert()的声明如下:

virtual void insert(cObject *obj);

因此,不能传递cObject或派生类的其他对象。您可以使用Packet的实例,因为它是从cObject继承的。因此,代码可能类似于:

void UdpOwnApp::generatePacket() {
    const auto& payload = makeShared<ApplicationPacket>();
    payload->setChunkLength(B(par("messageLength")));
    payload->setSequenceNumber(numGenerate);
    payload->addTag<CreationTimeTag>()->setCreationTime(simTime());

    std::ostringstream str;
    str << packetName << "-" << numSent;
    Packet *packet = new Packet(str.str().c_str());
    packet->insertAtBack(payload);
    queue.insert(packet);
    simtime_t d = simTime() + par("generateInterval");
    if (stopTime < SIMTIME_ZERO || d < stopTime) {
       selfMsg->setKind(GENERATE);
       scheduleAt(d,selfMsg);
    } else {
       selfMsg->setKind(STOP);
       scheduleAt(stopTime,selfMsg);
    }
}

void UdpOwnApp::sendPacket() {
    if (queue.isEmpty()) {
        // no packets in queue
    } else {
        cObject * obj = queue.pop();
        Packet * packet = dynamic_cast<Packet*>(obj);
        if (packet) {
            if (dontFragment)
                packet->addTag<FragmentationReq>()->setDontFragment(true);
            L3Address destAddr = chooseDestAddr();
            emit(packetSentSignal,packet);
            socket.sendTo(packet,destAddr,destPort);
            numSent++;
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。