我现在正在使用PCL(Point Cloud Library)处理c ++中的模板,我遇到了一些我无法解决的问题(我之前在互联网和堆栈上搜索过)
我有一个名为Features
的模板类。
我的hpp文件:
#ifndef KeyFeatures_hpp
#define KeyFeatures_hpp
// Declarations and includes
typedef pcl::PointXYZRGB PointTypeRGB;
template<typename FeatureType>
class Features {
public:
Features(const int typeDescriptor);
void setDescriptorExtractor(typename pcl::Feature<PointTypeRGB, FeatureType>::Ptr extractor);
private:
typename pcl::Feature<PointTypeRGB, FeatureType>::Ptr m_descriptor_extractor;
};
#endif /* Features_hpp */
在cpp文件中,我有一个构造函数,它将检查它是什么类型,然后执行一些操作。
template <typename FeatureType>
Features<FeatureType>::Features(const int type){
//Some code
if (type == DESCRIPTOR_SHOT){
pcl::SHOTEstimationOMP<PointTypeRGB, pcl::Normal, pcl::SHOT352>* shot = new pcl::SHOTEstimationOMP<PointTypeRGB, pcl::Normal, pcl::SHOT352>;
shot->setRadiusSearch (0.02f);
pcl::Feature<PointTypeRGB, pcl::SHOT352>::Ptr descriptor_extractor (shot);
descriptor_extractor->setSearchMethod (pcl::search::Search<PointTypeRGB>::Ptr (new pcl::search::KdTree<PointTypeRGB>));
this->m_descriptor_extractor = descriptor_extractor;//ERROR
setDescriptorExtractor(descriptor_extractor);//ERROR
// Some code
}
当我尝试填写我的变量成员时,错误出现在最后两行中。 每次我有以下错误x 10(对应于我的10种类型)
error: no matching conversion for functional-style cast from 'const shared_ptr<pcl::Feature<pcl::PointXYZRGB, pcl::SHOT352> >'
to 'this_type' (aka 'shared_ptr<pcl::Feature<pcl::PointXYZRGB, pcl::ShapeContext1980> >')
然而,在我的cpp文件的最后,我把我所有的模板类。例如:
template class Features<pcl::SHOT352>;
在我的main函数中,我使用:
调用了这个类Features<pcl::SHOT352> feature_SHOT(type);
似乎无法执行转换..
有人可以帮助我吗?
感谢
答案 0 :(得分:1)
显然您正在实例化Features<pcl::ShapeContext1980>
,因此其m_descriptor_extractor
的{{1}}类型为pcl::Feature<pcl::PointXYZRGB, pcl::ShapeContext1980>::Ptr
。
但是在构造函数中你还在使用shared_ptr<pcl::Feature<pcl::PointXYZRGB, pcl::ShapeContext1980>>
,即pcl::Feature<pcl::PointXYZRGB, pcl::SHOT352>::Ptr
- 一种完全不同的类型。
答案 1 :(得分:0)
首先,官方术语是一个&#34;类模板&#34; - 用于创建类的模板。
您似乎创建了一个名为Features<pcl::ShapeContext1980>
的类。
m_descriptor_extractor
类型为shared_ptr<pcl::Feature<pcl::PointXYZRGB, pcl::ShapeContext1980> >
您正在尝试为其分配shared_ptr<pcl::Feature<pcl::PointXYZRGB, pcl::SHOT352>>
。
它们是完全不相关的类型,因此在编译时失败。