NS3报错assert failed. cond="uid != 0", msg="Assert in TypeId::LookupByName: xxx not found", file=../sr

今天写NS3程序的时候发现老是报这个assert failed错误:

assert failed. cond="uid != 0", msg="Assert in TypeId::LookupByName: ns3::ndn::nrndn::SumoNodeSensor not found", file=../src/core/model/type-id.cc, line=539

terminate called without an active exception


我们知道, 写一个NS3的新模块,要写一个GetTypeId()的函数,以便NS3能够根据TypeID来查找一个类。然而我已经定义了该类的GetTypeId()静态函数 static TypeId tid = TypeId ("ns3::ndn::nrndn::NodeSensor"),但是就是在m_tid = TypeId::LookupByName (tid);阶段死活找不到这个名字。我就奇怪了,然后单步调试,发现在程序执行之前,每个类的GetTypeId 函数都要被执行一次,以在ns3中注册。是不是因为我没把NodeSensor这个类告诉ns3,导致它不知道要执行这个类的GetTypeId 函数呢?


我参考了其他模块的源码,果然,发现了每个含有GetTypeId 函数的源码前面都有一句宏:NS_OBJECT_ENSURE_REGISTERED

点进去,它的解释是:

/**
 * \ingroup object
 * \brief Register the class in the ns-3 factory.
 *
 * This macro should be invoked once for every class which
 * defines a new GetTypeId method.
 *
 * If the class is in a namespace, then the macro call should also be
 * in the namespace.
 */

说明要调用GetTypeId 函数,必须先用这个宏定义出相应的函数,以在运行之前执行GetTypeId 函数,让类在NS3中注册。

解决方法:在GetTypeId 函数前面添加

NS_OBJECT_ENSURE_REGISTERED (SumoNodeSensor);

编译通过。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值