gpt4 book ai didi

c++ - 使用 INET 扩展模块未正确执行覆盖代码

转载 作者:行者123 更新时间:2023-12-02 10:31:21 24 4
gpt4 key购买 nike

我必须在 OMNeT++ 5.6.1 (Ubuntu 18.04.4) 中从 INET4 扩展 UdpBasicApp 模块并执行两个重写方法(初始化和 handleMessageWhenUp)。
这似乎是一项简单的任务,当我构建项目(暂时存储在 inet4 的“示例”文件夹中)时看起来一切都很好,没有错误,但是在开始模拟后,代码没有成功覆盖。而是执行原始代码(来自 UdpBasicApp 的代码)。
事实上,在编辑器中查看代码后,方法的名称并不是。粗体 (应该是)并且关键字没有像通常应该的那样着色。
我的 C++ 技能不高(我的 OMNeT 也不高),因此我不确定到底发生了什么。
扩展的简单模块称为“PriorityApp”(我只添加了一个整数字段)。

这是 .ned 代码(不确定是否需要)

package inet.examples.MyProject.src;

import inet.applications.udpapp.UdpBasicApp;

// The module extends UdpBasicApp adding a priority parameter
simple PriorityApp extends UdpBasicApp
{
parameters:
int priority = default(0); // priority 0 = higher priority
}

这是.h代码
#ifndef __INET4_PRIORITYAPP_H_
#define __INET4_PRIORITYAPP_H_

#include "inet/applications/udpapp/UdpBasicApp.h"

namespace inet {

class PriorityApp : public UdpBasicApp
{
protected:
int priority;

virtual void initialize(int stage) override;
virtual void handleMessageWhenUp(cMessage *msg) override;
};

} // namespace inet

#endif // ifndef __INET_PRIORITYAPP_H

这是 .cc 代码
#include "PriorityApp.h"

namespace inet {

Define_Module(PriorityApp);

void PriorityApp::initialize(int stage)
{
msg = new cMessage("priority");
EV << "Example Message" << endl;
}

void PriorityApp::handleMessageWhenUp(cMessage *msg)
{

}

} //namespace inet

这是 .ini 文件
[General]

[Config SwitchedNet1G]
description = "1Gbps Switched Network"
network = SwitchedNet

**.dataRate = 1Gbps # 1 Gbps channel datarate

# Priority stuff
**.host[0].app[0].priority = 1

# Dst Params
**.sink.app[*].typename = "UdpSink" # Destination host (it receives messages)
**.sink.app[*].localPort = 2500

# Src Params
**.host[0].app[0].packetName = "Host0-Data"
**.host[*].app[0].typename = "PriorityApp" # Source host (they send messages)
**.host[*].app[0].destPort = 2500
**.host[*].app[0].destAddresses = "sink"
**.host[0].app[0].sendInterval = 3s
**.host[*].app[0].startTime = uniform (0s, 3s)

# EthInterface Setup
**.eth[*].qEncap.typename = "Ieee8021qEncap" # 8021Q Encapsulation
**.etherSwitch.numEthInterfaces = 2 # Switch ethInterfaces total number (2)
**.numEthInterfaces = 1

# Global Params
**.messageLength = 100B
**.numHosts = 1
**.numApps = 1 # every host has 1 app (UdpBasicApp or UdpSink)

最佳答案

这里有两个独立的故障:

1.) 您不应该将 C++ 代码添加到 INET 的示例文件夹中。该文件夹未指定为源文件夹,因此构建系统不会拾取、构建和链接到可执行文件,这意味着您的代码不存在于模型中。这就是你没有得到新行为的原因之一。

2.) 即使您将源代码放在 src文件夹以及 UdpBasicApp 和构建系统将正确链接它,您仍然必须正确设置 NED 部分。具体来说,您必须指定 @class 属性来告诉 NED 您打算使用哪个 C++ 类来指定行为:@class(PriorityApp)否则,您的 PriorityApp 模块将从 UdpBasicApp 继承 @class 属性的值,并使用 CdpBasicApp C++ 类。

import inet.applications.udpapp.UdpBasicApp;

// The module extends UdpBasicApp adding a priority parameter
simple PriorityApp extends UdpBasicApp
{
@class(PriorityApp)
parameters:
int priority = default(0); // priority 0 = higher priority
}

关于c++ - 使用 INET 扩展模块未正确执行覆盖代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62108384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com