Omnet++ 检查Omnet+中的_和_cast()错误+;

Omnet++ 检查Omnet+中的_和_cast()错误+;,omnet++,inet,Omnet++,Inet,我正在用Omnet++和INET框架模拟网络。我想得到节点的位置(坐标x&y)。因此,我执行以下代码: cModule *host = getContainingNode(this); IMobility *mobility = check_and_cast<IMobility *>(host->getSubmodule("mobility")); ... = mobility -> getCurrentPosition(); cModule*h

我正在用Omnet++和INET框架模拟网络。我想得到节点的位置(坐标x&y)。因此,我执行以下代码:

    cModule *host = getContainingNode(this);
    IMobility *mobility = check_and_cast<IMobility *>(host->getSubmodule("mobility"));
    ... = mobility -> getCurrentPosition();
cModule*host=getContainingNode(该节点);
IMobility*mobility=check_和_cast(主机->获取子模块(“mobility”);
... = mobility->getCurrentPosition();
但是,当我运行模拟时,我得到了这个错误

check_和_cast():无法将nullptr强制转换为“inet::IMobility*”类型

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


顺便说一句,我已经在NED文件中定义了mobilityType,并包括IMobility.h

您共享的NED代码表明您有一个实现IMobility接口的简单模块,尽管C++代码看起来像是一个简单模块,里面是代表网络主机的复合模块内部,这个复合模块也包含一个单独的简单模块,称为“迁移”,它实现了不平衡接口。(这就是代码在INET中的实现方式)

你应该:

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

我假设(并建议)您在第一条路线上合作,因此您应该重新整理您的NED文件。

您的主机中似乎没有
移动
子模块。你能给内德看一下你主人的档案吗?@JerzyD。这是我在ned文件中的主机:
simple Txc-like IMobility
{/code>
参数:
bool-isSource=default(false);
bool-isDest=default(false);
字符串mobilityType=default(“stationmobility”);
@display(“i=device/hub\vs”);
@networkNode;
门:
输入门[];
}
对不起,我不知道如何在中添加代码、图片或文件comment@JerzyD. 我认为发生该错误是因为主机Txc的类型很简单,所以它没有子模块。但是
IMobility
是一个接口模块,它没有网关谢谢@Mr.Rudi。我将主机重新安排为复合模块。错误已修复。现在我还有两个问题:1。我被子模块中的门弄糊涂了。我可以直接发送消息到另一个主机而不在子模块的门之间传输吗?我想知道子模块在没有门的情况下是否可以正常工作?(例如,我将接口模块移动性添加到主机中,但它似乎没有门)我想问的第二个问题是:我可以使用哪个功能向无线节点的邻居发送消息广播?我将要模拟无线传感器网络,我可以只使用节点ID发送消息,而不使用IP地址(这似乎减少了节点必须存储的信息和复杂性,我不必使用RoutingTable和IPv4NetworkConfigurator模块)?