Omnet++:未知参数。不能在模拟中使用模块参数
Omnet++: unknown parameter. Cannot use module parameters in simulations
所以我尝试在 omnetpp 中创建一个简单的模拟,但我在模块参数方面遇到了问题。
我提供了一个简单的例子来说明我的问题。 如果我在所有注释的代码中保留注释部分,模拟 运行 没问题。如果我取消注释所有代码中的注释部分,我的程序编译正常,但模拟不会 运行。 调试输出打印以下消息:
网络设置期间模块 (omnetpp::cModule) net (id=1) 错误:(收发器):未知参数“什么”。
我不知道问题出在哪里,因为 'what' 在我的 .ini 文件和我的 .ned 文件中定义。这是我的代码:
transceiver.cc
#include <omnetpp.h>
using namespace omnetpp;
class transceiver : public cSimpleModule
{
private:
//int what;
public:
transceiver();
virtual ~transceiver();
protected:
virtual void initialize() override;
virtual void handleMessage(cMessage* msg) override;
};
Define_Module(transceiver);
transceiver::transceiver() {
//what = par("what");
}
transceiver::~transceiver() {
}
void transceiver::initialize() {
cMessage* msg = new cMessage("Message");
send(msg, "out");
}
void transceiver::handleMessage(cMessage* msg) {
EV << "We got a message!" << endl;
delete msg;
}
package.ned
package packetgenerator;
@license(omnetpp);
omnetpp.ini
[General]
network = transceiver.net
#net.transceiver.what = 5
transceiver.ned
package transceiver;
simple transceiver
{
parameters:
//int what = default(2);
gates:
input in;
output out;
}
network net
{
submodules:
transceiver: transceiver;
connections:
transceiver.out --> transceiver.in;
}
您不应该访问模块构造函数中的参数。应在 initalize()
方法中访问参数。
使用
transceiver::initialize(int stage) {
what = par("what");
}
而不是
transceiver::transceiver() {
what = par("what");
}
所以我尝试在 omnetpp 中创建一个简单的模拟,但我在模块参数方面遇到了问题。
我提供了一个简单的例子来说明我的问题。 如果我在所有注释的代码中保留注释部分,模拟 运行 没问题。如果我取消注释所有代码中的注释部分,我的程序编译正常,但模拟不会 运行。 调试输出打印以下消息:
网络设置期间模块 (omnetpp::cModule) net (id=1) 错误:(收发器):未知参数“什么”。
我不知道问题出在哪里,因为 'what' 在我的 .ini 文件和我的 .ned 文件中定义。这是我的代码:
transceiver.cc
#include <omnetpp.h>
using namespace omnetpp;
class transceiver : public cSimpleModule
{
private:
//int what;
public:
transceiver();
virtual ~transceiver();
protected:
virtual void initialize() override;
virtual void handleMessage(cMessage* msg) override;
};
Define_Module(transceiver);
transceiver::transceiver() {
//what = par("what");
}
transceiver::~transceiver() {
}
void transceiver::initialize() {
cMessage* msg = new cMessage("Message");
send(msg, "out");
}
void transceiver::handleMessage(cMessage* msg) {
EV << "We got a message!" << endl;
delete msg;
}
package.ned
package packetgenerator;
@license(omnetpp);
omnetpp.ini
[General]
network = transceiver.net
#net.transceiver.what = 5
transceiver.ned
package transceiver;
simple transceiver
{
parameters:
//int what = default(2);
gates:
input in;
output out;
}
network net
{
submodules:
transceiver: transceiver;
connections:
transceiver.out --> transceiver.in;
}
您不应该访问模块构造函数中的参数。应在 initalize()
方法中访问参数。
使用
transceiver::initialize(int stage) {
what = par("what");
}
而不是
transceiver::transceiver() {
what = par("what");
}