2014-01-15 66 views
0

我得到以下样本代码的编译器错误,这是从PCL教程PCL转换请求

pcl::PointCloud<pcl::PointXYZ> cloud; 
std::vector<pcl::PointXYZ> data = cloud.points; 

http://pointclouds.org/documentation/tutorials/basic_structures.php

完整编译错误是

> error: conversion from ‘std::vector<pcl::PointXYZ, 
> Eigen::aligned_allocator<pcl::PointXYZ> >’ to non-scalar type 
> ‘std::vector<pcl::PointXYZ>’ requested 

我目前的pcl版本是pcl 1.6,它在我安装ROS groovy时安装,所以我不确定这是否是问题所在。

回答

0

问题是你不能做到这一点:

std::vector<pcl::PointXYZ> data ; 

因为PointXYZ型是大小3(X,Y,Z)的载体,你需要一个矩阵保存一堆ØpointXYZs。

但如果你想保存点,你可以使用for循环。

for (int i=0; i < cloud.size()); i++) 
{ 
    vector[0] = cloud.points[i].x; 
    vector[1] = cloud.points[i].y; 
    vector[2] = cloud.points[i].z; 
} 

如果要定义一个点,并为其分配与价值做到这一点:

pcl::PointXYZ point; 

因为定义是:

pcl::PointXYZ::PointXYZ ( 
float _x, 
float _y, 
float _z 
)  
0

编译器无法将点云转换为点向量。 我认为你必须自己做:

pcl::PointCloud<pcl::PointXYZ> cloud; 
std::vector<pcl::PointXYZ> data ; 
//initialize your cloud here 
if (!cloud.empty()) 
for (int i=0;i<cloud.size();i++) 
    data[0]=cloud.points[0]; 

希望它能帮助!