子类化pcl :: Feature时出错

时间:2016-05-14 20:54:07

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

我正在跟随这个tutorial进行子类化PCL类。但是我试图将带有两个typename模板的pcl::Feature子类化,当我尝试使用PCL_INSTANTIATE宏和#define PCL_INSTANTIATE_SurfaceDetector时,我遇到了以下错误:

error: macro 
"PCL_INSTANTIATE_SurfaceDetector" requires 2 arguments, but only 1 given
 PCL_INSTANTIATE(SurfaceDetector, (PCL_XYZ_POINT_TYPES)(PCL_XYZ_POINT_TYPES))
 ^ 

还有这个:

surfacedetector.cpp:6: error: 'PCL_INSTANTIATE_SurfaceDetector' does not name a type
 PCL_INSTANTIATE(SurfaceDetector, (PCL_XYZ_POINT_TYPES)(PCL_XYZ_POINT_TYPES))
 ^

我尝试从pcl::pclBase继承,而且有效!我想问题是我如何处理额外的类型。这些是我的.cpp .h和.hpp文件:

surfacedetector.hpp:

#ifndef SURFACEDETECTOR_IMPL_H_
#define SURFACEDETECTOR_IMPL_H_

#include <surfacedetector.h>

// code ...

#define PCL_INSTANTIATE_SurfaceDetector(T1,T2) template class PCL_EXPORTS SurfaceDetector<T1,T2>;

#endif // SURFACEDETECTOR_H_

surfacedetector.h:

#ifndef SURFACEDETECTOR_H_
#define SURFACEDETECTOR_H_

// PCL
#include <pcl/features/feature.h>
#include <pcl/search/search.h>

// code...

#endif // SURFACEDETECTOR_H

surfacedetector.hpp

#ifndef SURFACEDETECTOR_IMPL_H_
#define SURFACEDETECTOR_IMPL_H_

#include <surfacedetector.h>

// code ...

#define PCL_INSTANTIATE_SurfaceDetector(T1,T2) template class PCL_EXPORTS SurfaceDetector<T1,T2>;

#endif // SURFACEDETECTOR_H_

更新

当我使用PCL_INSTANTIATE_PRODUCT代替PCL_INSTANTIATE时,它编译得很好,但是当我尝试使用我的课时,我收到此错误:

error: cannot declare field 'CloudProcessing::surfaceDetector' to be of abstract type 'SurfaceDetector<pcl::PointXYZRGB, pcl::PointXYZ>'
     SurfaceDetector<pcl::PointXYZRGB, pcl::PointXYZ> surfaceDetector;
                                                      ^

1 个答案:

答案 0 :(得分:0)

我的错误是pcl :: Feature是一个抽象类,它有纯虚函数void computeFeature(PointCloudOut &output),我必须覆盖它才能在我的代码中用作具体类。

Furthurmore使用PCL_INSTANTIATE_PRODUCT解决了宏的问题。