我正在跟随这个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文件:
#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_
#ifndef SURFACEDETECTOR_H_
#define SURFACEDETECTOR_H_
// PCL
#include <pcl/features/feature.h>
#include <pcl/search/search.h>
// code...
#endif // SURFACEDETECTOR_H
#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;
^
答案 0 :(得分:0)
我的错误是pcl :: Feature是一个抽象类,它有纯虚函数void computeFeature(PointCloudOut &output)
,我必须覆盖它才能在我的代码中用作具体类。
Furthurmore使用PCL_INSTANTIATE_PRODUCT
解决了宏的问题。