Omnet ++:未知参数。无法在模拟中使用模块参数

时间:2016-09-12 11:26:35

标签: c++ .net ini omnet++

所以我正在尝试在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;
}

1 个答案:

答案 0 :(得分:2)

NOT 应该访问模块构造函数中的参数。应使用initalize()方法访问参数。

使用

transceiver::initialize(int stage) {
    what = par("what");
}

而不是

transceiver::transceiver() {
    what = par("what");
}