C++ 使用const_cast强制转换到ConstPtr对象

C++ 使用const_cast强制转换到ConstPtr对象,c++,pointers,casting,constants,point-cloud-library,C++,Pointers,Casting,Constants,Point Cloud Library,最近,我在我的项目中遇到了一个难题。我可以创建一个类型为pcl::PointCloud::ConstPtr的单独对象,并向其传递一个与之相同的点云(除了可变点云),也可以尝试将可变点云强制转换为ConstPtr点云。我试图使用constcast将可变点云转换为一种格式,在这种格式中,多个函数只接受ConstPtr的点云。这是我表演的演员阵容: pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rg

最近,我在我的项目中遇到了一个难题。我可以创建一个类型为pcl::PointCloud::ConstPtr的单独对象,并向其传递一个与之相同的点云(除了可变点云),也可以尝试将可变点云强制转换为ConstPtr点云。我试图使用constcast将可变点云转换为一种格式,在这种格式中,多个函数只接受ConstPtr的点云。这是我表演的演员阵容:

pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgbHandler(const_cast<pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr >(&cloud));
pcl::可视化::PointCloudColorHandlerRGBField rgbHandler(const_cast(&cloud));
但终端中会抛出一个错误

error: const_cast to
      'pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr' (aka 'shared_ptr<const
      PointCloud<pcl::PointXYZRGB> >'), which is not a reference,
      pointer-to-object, or pointer-to-data-member
  ...const_cast<pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr >(&cloud));
错误:常量转换为
“pcl::PointCloud::ConstPtr”(又名“shared_ptr”),它不是引用,
指向对象的指针,或指向数据成员的指针
…const_cast(&cloud));
这很奇怪,因为cloud在这里是用pcl::PointCloud类型声明的:

pcl::PointCloud<pcl::PointXYZRGB> cloud;
pcl::点云;

那么为什么这个常量演员不能工作呢?什么使它工作?

未定义从对象引用(即
&T
)到引用类型(即
共享\u ptr
)的智能指针的转换。您需要构造智能指针。您不需要任何强制转换,指向非常量对象的指针可以传递给期望指针指向常量的函数。