Point cloud library 在使用PCL时,有人能告诉我们一些关于使用::Ptr和新操作符的情况吗

Point cloud library 在使用PCL时,有人能告诉我们一些关于使用::Ptr和新操作符的情况吗,point-cloud-library,point-clouds,Point Cloud Library,Point Clouds,我试图用 typedef pcl::PointCloud<PointNT> PointCloudT; // in the .h file. 1> f:\cpps\pclClass\pclClass\main\u routine.cpp10:错误C2440:“初始化”:无法从“PointCloudT*”转换为“boost::shared\u ptr>” 但如果声明是由 PointCloudT::Ptr object(new PointCloudT); // in main f

我试图用

typedef pcl::PointCloud<PointNT> PointCloudT;   // in the .h file.
1> f:\cpps\pclClass\pclClass\main\u routine.cpp10:错误C2440:“初始化”:无法从“PointCloudT*”转换为“boost::shared\u ptr>”

但如果声明是由

PointCloudT::Ptr object(new PointCloudT);   // in main func
PointCloudT::Ptr scene(new PointCloudT);    // works and correct
我不擅长C++,不知道这个错误的问题。有人能告诉我一点吗。

新的PointCloudT表达式生成指向点云的原始指针PointCloudT*

PointCloudT::Ptr是boost::shared_Ptr的同义词,它是指向点云的智能指针。您可以查看这个模板类的概要。如您所见,它有一个构造函数

  template<class Y> explicit shared_ptr(Y * p);
这意味着它可以从指向点云的原始指针构建。注意,它禁止隐式构造和复制初始化

这就是为什么第一个代码段在您请求两个不同类之间的隐式转换时出错,而第二个代码段在您显式调用共享指针的构造函数时工作

  template<class Y> explicit shared_ptr(Y * p);
  explicit shared_ptr(PointCloudT * p);