尝试在 omnet++ 中创建动态模块时遇到的问题

Problem encountered while trying to create dynamic modules in omnet++

我是初学者,正在使用 Omnet++ 学习网络模拟。 我一直在尝试创建动态模块(客户端)并将其连接到静态创建的模块(服务器),但是函数 getParentModule() 出现错误 说:

use of undeclared identifier 'getParentModule'.

这是我的服务器class:

#include "Server.h"
#include <string>


Define_Module(Server);

void create_grp(int num, int id) {
    cModuleType *moduleType = cModuleType::get("c");

    std::string name = "grp" + std::to_string(id);
//Here my error
    cModule *module = moduleType->create(name, getParentModule());

    module->setGateSize("in", 1);
    module->setGateSize("out", 1);

    module->finalizeParameters();
    module->buildInside();
}

void Server::initialize() {
    // TODO Auto-generated constructor stub
    create_grp(3, 2);

}

这是我的 .ned 文件

simple Server
{
    gates:
        inout g1[];
}

simple Admin
{
    parameters:
        int nbr_of_groups_to_create;
        int nbr_of_nodes_in_each_group;

    gates:
        inout g2;
}

simple Client
{
    gates:
        inout g3;
}

network Network
{
    @display("bgb=384,297");
    submodules:
        s: Server {
            @display("i=device/server;p=173,89");
        }

        a: Admin {
            @display("p=264,167;i=device/laptop");
        }

        c[10]: Client {
            @display("i=device/pc;p=79,167");
        }

    connections:
        a.g2 <--> s.g1++;
        for i=0..9 {
            s.g1++ <--> c[i].g3;
        }
}

您已将 create_grp() 声明为独立函数,因此它无法知道什么是 getParentModule()。我建议在 class Server.

中声明 create_grp

编辑
create() 需要 const char* 作为第一个参数,但您提供了 std::string。您应该使用c_std()std::string转换为const char*,例如:

cModule *module = moduleType->create(name.c_str(), getParentModule());