错误:没有名为'value_type'const pcl::PointCloud<pcl::PointX

error: no type named 'value_type' in 'class boost::shared_ptr<const pcl::PointCloud<pcl::PointXYZ> >'

本文关键字:pcl const PointCloud PointX type value 错误      更新时间:2023-10-16

我有一些代码看起来像这样:

typedef pcl::PointXYZRGB pcl_ColorPointType;
typedef pcl::PointXYZ pcl_PointType;
typedef pcl::PointCloud<pcl_PointType> pcl_XYZPointCloudType;
typedef pcl::PointCloud<pcl_ColorPointType> pcl_ColorPointCloudType;
typedef pcl_XYZPointCloudType::Ptr pcl_XYZPointCloudPtrType;
typedef pcl_ColorPointCloudType::Ptr pcl_ColorPointCloudPtrType;
void
BuildMeshFromDepthImage()
{
    pcl_XYZPointCloudConstPtrType pointCloud = BuildPurePointCloudFromDepthImage( ); // assume BuildPurePointCloudFromDepthImage function exists
    BuildMeshFromPointCloud<pcl_XYZPointCloudConstPtrType>( pointCloud );
}
template<typename T_pclPtr>
void BuildMeshFromPointCloud(const T_pclPtr &pointCloud )
{
    // some code
    // error: no type named 'value_type'
    const typename T_pclPtr::value_type::PointType& pt = pointCloud->points[i]; 
    // some code
}

知道为什么这不起作用吗?注:此代码适用于VS2010,但不适用于GCC4.9。这可能是因为不同版本的PCL库吗?

From pcl::PointCloud<类模板引用>

typedef boost::shared_ptr< PointCloud< PointT > >   Ptr

和提升。SharedPtr

element_type当T不是数组类型时为T,当T为U[]或U[N]时为U。

这就是你需要的:

typename T_pclPtr::element_type::PointType& t= pointCloud->points[i];

对于c++ 11或更高版本,可以这样使用:

auto t= pointCloud->points[i];