如何解决如何为调用错误修复不匹配的函数,并且在此作用域错误中未声明''
我正在尝试创建一个新的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 举报,一经查实,本站将立刻删除。