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>());
其实段报错信息中有两个关键词
- lacks a cast
- BOOST_ASSERT( p == 0 || p != px )
cast一般用于类型转换,BOOST_ASSERT( p == 0 || p != px )表示指针为空或在指针类型不同。所以,根据上述报错信息可以判断Bug是源自指针赋值时类型不同。
然后提示信息中指出一个指针类型是‘boost::shared_ptr’ ,另一个是‘boost::shared_ptr::element_type’
- boost::shared_ptr* 是一个指向boost::shared_ptr的指针。在本项目是new boost::shared_ptr()
- 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())