C ++模板 - 没有可行的转换错误

时间:2016-03-23 09:22:23

标签: c++ templates point-cloud-library

我现在正在使用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);

似乎无法执行转换..

有人可以帮助我吗?

感谢

2 个答案:

答案 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 - 一种完全不同的类型。

作为旁注,you generally don't implement templates in .cpp files

答案 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>>

它们是完全不相关的类型,因此在编译时失败