error: ‘class pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ>’ has no member named ‘setSourceFeatures’ icp.setSourceFeatures(fpfhs1);
时间: 2023-12-03 14:41:56 浏览: 31
这个错误提示是因为 `pcl::IterativeClosestPoint` 这个类中没有名为 `setSourceFeatures` 的成员函数。可能是代码中使用了过时的函数或者是函数名拼写不正确。
可以尝试使用 `setInputSource` 函数来设置源点云的特征,例如:
```cpp
icp.setInputSource(fpfhs1);
```
如果你需要设置目标点云的特征,可以使用 `setInputTarget` 函数。如果这些修改没有解决问题,建议你仔细检查一下函数的名称和版本是否正确。
相关问题
pcl::PointCloud<pcl::PointXYZ> 转换成 pcl::PointCloud<pcl::PointXYZ>::Ptr
pcl::PointCloud<pcl::PointXYZ> 是一个点云数据类型,表示一个由PointXYZ类型的点组成的点云。而pcl::PointCloud<pcl::PointXYZ>::Ptr 是一个指向 pcl::PointCloud<pcl::PointXYZ> 类型对象的智能指针。
要将 pcl::PointCloud<pcl::PointXYZ> 转换为 pcl::PointCloud<pcl::PointXY>::Ptr,可以使用 boostmake_shared 函数来创建智能指针,并将原始的点云对象作为参数传递给它。具的代码如下所示:
```cpp
pcl::PointCloud<pcl::PointXYZ>::Ptr cloudPtr(new pcl::PointCloud<pcl::PointXYZ>(cloud));
```
其中,cloud 是 pcl::PointCloud<pcl::PointXYZ> 类型的点云对象,cloudPtr 是 pcl::PointCloud<pcl::PointXYZ>::Ptr 类型的智能指针。
这样就完成了从普通的点云对象到智能指针的转换。
在类中定义 pcl::PointCloud<pcl::PointXYZ>::Ptr
在类中定义 `pcl::PointCloud<pcl::PointXYZ>::Ptr` 可以这样写:
```cpp
class MyClass {
private:
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr_;
public:
MyClass() : cloud_ptr_(new pcl::PointCloud<pcl::PointXYZ>) {
// 初始化 cloud_ptr_
}
// 其他成员函数
};
```
在类的私有成员中定义了 `pcl::PointCloud<pcl::PointXYZ>::Ptr` 类型的 `cloud_ptr_` 智能指针,它将指向一个点云数据的结构体,该结构体包含了点云数据的信息。
在类的构造函数中,通过 `new` 关键字对 `cloud_ptr_` 进行了初始化,即为 `cloud_ptr_` 分配了动态内存,并将其指向了一个新建的 `pcl::PointCloud<pcl::PointXYZ>` 对象。
在其他成员函数中,可以通过 `cloud_ptr_` 来访问和操作点云数据结构体中的数据。