【问题标题】:Omnet access method of another submodule error - no matching function for call to ‘check_and_cast(cModule*&)’另一个子模块的 Omnet 访问方法错误 - 没有匹配函数调用‘check_and_cast(cModule*&)’
【发布时间】:2015-06-08 15:53:30
【问题描述】:

错误:没有匹配函数调用'check_and_cast(cModule*&)'

我正在尝试使用具有 n 类类型 MassMobility 的另一个模块“移动性”的当前位置。

cModule* parentmod = getParentModule();

cModule* mobilitymod = parentmod->getParentModule()->getSubmodule("mobility");
EV<<"Current module is "<<mobilitymod->getFullName() <<endl;

MassMobility* mobility = check_and_cast<MassMobility *>(mobilitymod);
mobility->getCurrentPosition();

我收到编译时错误:- no matching function for call to ‘check_and_cast(cModule*&amp;)’。但我仍然能够从移动对象中获取功能,如最后一行所示。任何人都可以建议我如何纠正它。

【问题讨论】:

  • "没有匹配的 function 调用" ??这真的是错误信息吗?
  • no matching function for call to ‘check_and_cast(cModule*&amp;)’ 它的确切错误。很抱歉我上次没有注意到
  • @Karoly ovrath - 我什至试图在 omnet google group 中寻找它,我在哪里得到了这个线索:- groups.google.com/forum/#!topic/omnetpp/2CNpYn6E_14 ,这意味着变量名称(移动性)不应与对象名称相同(移动模式)..
  • 尝试使用dynamic_cast 而不是check_and_cast,类似于:mobility = dynamic_cast&lt;Veins::TraCIMobility*&gt;(tmpMobility);,然后添加一个断言:ASSERT(mobility);
  • 您在从外部调用的 public 方法中是否有 Enter_Method("&lt;method_name&gt;") 宏?也许你试图调用的方法只是一个没有实际实现的原型......

标签: c++ omnet++ inet


【解决方案1】:

好吧,我找出问题所在。首先,我需要在当前子模块中添加移动模块的头文件以获取定义。所以我包括 -

#include "MassMobility.h"
#include "StationaryMobility.h"

然后在代码中我做了以下修改:-

cModule* parentmod = getParentModule();
cModule* mobilitymod = parentmod->getParentModule()->getSubmodule("mobility");
MassMobility* massMobilityMod = dynamic_cast<MassMobility*>(mobilitymod);
EV<<"Current position is <<"massMobilityMod->getCurrentPosition();

所以错误的原因是缺少定义,这是由该解决方案中的头文件提供的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2019-09-25
    • 2012-12-28
    • 2015-03-31
    相关资源
    最近更新 更多