所以我正在尝试在omnetpp中创建一个简单的模拟,我遇到了模块参数的问题。
我提供了一个简单的例子来证明我的问题。 如果我在评论的所有代码中留下注释部分,模拟运行正常。如果我取消注释所有代码中的注释部分,我的程序编译正常,但模拟将不会运行。调试输出打印以下消息:
网络设置期间模块(omnetpp :: cModule)net(id = 1)出错:(收发器):未知参数`what'。
我不知道问题是什么,因为我的.ini文件和我的.ned中定义了'what'。这是我的代码:
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;
}
答案 0 :(得分:2)
您 NOT 应该访问模块构造函数中的参数。应使用initalize()
方法访问参数。
使用
transceiver::initialize(int stage) {
what = par("what");
}
而不是
transceiver::transceiver() {
what = par("what");
}