Omnet ++

时间:2016-10-09 09:36:54

标签: omnet++ inet

我正在使用INET框架在Omnet ++中模拟网络。我想获得节点的位置(协调x& y)。所以我做了这个代码:

    cModule *host = getContainingNode(this);
    IMobility *mobility = check_and_cast<IMobility *>(host->getSubmodule("mobility"));
    ... = mobility -> getCurrentPosition();

但是,当我运行模拟时,我收到了此错误

  

check_and_cast():无法将nullptr转换为'inet :: IMobility *'

你能解释一下这个错误吗? 如我所见,如果模拟器通知,那么 host-&gt; getSubmodule(“mobility”) 是nullptr?

顺便说一下,我在NED文件中定义了 mobilityType 并包含 IMobility.h

1 个答案:

答案 0 :(得分:2)

您共享的NED代码显示您有一个实现IMobility接口的简单模块,而C ++代码看起来像是一个简单模块内部的东西,它是一个复合模块,代表网络主机,这个复合模块也是包含一个单独的简单模块,名为&#34; mobility&#34;实现IMobility接口。 (这是在INET中实现代码的方式)。

你应该:

  • 安排你的代码,使你有一个复合模块作为networkNode,里面有几个简单的模块(其中一个是移动模块)。
  • 如果您坚持使用已经实现IMobility接口的简单模块(在C ++中),那么您已经可以使用getCurrentPosition方法访问该对象上的位置。

我假设(并推荐)你在第一条路线上工作,所以你应该重新安排你的NED文件。