我正在使用PCL(Point Cloud Library)有一个继承自pcl :: PointXYZ的自定义PointT
struct PointXYZx : public pcl::PointXYZ
{
};
POINT_CLOUD_REGISTER_POINT_STRUCT (PointXYZx, (float, x, x) (float, y, y) (float, z, z))
我想用CloudViewer绘制它:
pcl::PointCloud<PointXYZx>::Ptr cloud (new pcl::PointCloud<PointXYZx>());
pcl::visualization::CloudViewer viewer ("Simple Cloud Viewer");
viewer.showCloud(cloud);
但它让我错误地说:
main.cpp: In function ‘int main()’:
main.cpp:30:29: error: no matching function for call to ‘pcl::visualization::CloudViewer::showCloud(pcl::PointCloud<PointXYZx>::Ptr&)’
viewer.showCloud(cloud);
^
/usr/include/pcl-1.7/pcl/visualization/cloud_viewer.h:97:9: note: no known conversion for argument 1 from ‘pcl::PointCloud<PointXYZx>::Ptr {aka boost::shared_ptr<pcl::PointCloud<PointXYZx> >}’ to ‘const ConstPtr& {aka const boost::shared_ptr<const pcl::PointCloud<pcl::PointXYZ> >&}’
我尝试使用以下方法将PointXYZx转换为PointXYZ:
viewer.showCloud((pcl::PointCloud<pcl::PointXYZ>::Ptr)cloud);
然后它告诉我:
/home/bruce/projects/mapomatix/mapomatix-pc/main.cpp:30:65: error: no matching function for call to ‘boost::shared_ptr<pcl::PointCloud<pcl::PointXYZ> >::shared_ptr(pcl::PointCloud<PointXYZx>::Ptr&)’
viewer.showCloud((pcl::PointCloud<pcl::PointXYZ>::Ptr)(cloud));
我怎样才能让它发挥作用?
答案 0 :(得分:0)
showCloud函数的输入类型是&#34; boost :: shared_ptr&#34; 。你可以实例化如下的shared_ptr:
boost::shared_ptr<pcl::PointCloud<pcl::PointXYZx>> cloud_test;
cloud_test = boost::make_shared <pcl::PointCloud<pcl::PointXYZx>> (new pcl::PointCloud<pcl::PointXYZx>);
viewer.showCloud(cloud_test);
如果你正确定义了新的点类型,那么输入&#34; cloud_test&#34;就没有问题。和功能&#34; ShowCloud&#34;。
您可以看到此link以了解有关实例化boost :: shared_ptr的更多信息。