编译报错boost::shared_ptr指针赋值类型错误

error: comparison between distinct pointer types 
‘boost::shared_ptr<laserScan>*’ and 
‘boost::shared_ptr<laserScan>::element_type*’ 
{aka ‘laserScan*’} lacks a cast
BOOST_ASSERT( p == 0 || p != px ); // catch self-reset errors

上述是报错信息,本报错信息对应的代码为为:

boost::shared_ptr<laserScan> laserScanPtr;
laserScanPtr = boost::make_shared<laserScan>(scanCloud);
//下面这行就是报错的代码
laserScanPtr.reset(new boost::shared_ptr<laserScan>());

其实段报错信息中有两个关键词

  1. lacks a cast
  2. BOOST_ASSERT( p == 0 || p != px )

cast一般用于类型转换,BOOST_ASSERT( p == 0 || p != px )表示指针为空或在指针类型不同。所以,根据上述报错信息可以判断Bug是源自指针赋值时类型不同。

然后提示信息中指出一个指针类型是‘boost::shared_ptr’ ,另一个是‘boost::shared_ptr::element_type

  1. boost::shared_ptr* 是一个指向boost::shared_ptr的指针。在本项目是new boost::shared_ptr()
  2. boost::shared_ptr::element_type* 就是boost::shared_ptr管理的对象的指针,即laserScan*。boost::shared_ptr的reset函数的参数应该是laserScan*,即laserScanPtr.reset(new laserScan())

所以上述bug是因为shared_ptr的reset()函数传参时将boost::shared_ptr* 的变量赋值给laserScan*的变量,因为指针类型不同出现报错。将上述代码改成如下代码即可:

laserScanPtr.reset(new laserScan())
  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值