Templates 如何创建PCL要素类的常规实例?

Templates 如何创建PCL要素类的常规实例?,templates,eigen,point-cloud-library,Templates,Eigen,Point Cloud Library,我想用PCL计算各种特征。我的想法是创建一个程序,根据命令行上给出的类名称及其参数创建功能,计算它们并将它们写入文件 因此,我需要一些代码来创建通用特性。PCL功能是模板类。必须使用输入类型(要计算它们的数据类型)和输出类型来实例化它们。输入类型通常是pcl::PointCloud,所以我认为这不是问题。对于输出,我使用Eigen::MatrixXf作为通用输出类型。 然而,我有一些奇怪的错误 我写了一个简单的例子,它使用了一些typedef,以便更容易修改: #include <pcl/

我想用PCL计算各种特征。我的想法是创建一个程序,根据命令行上给出的类名称及其参数创建功能,计算它们并将它们写入文件

因此,我需要一些代码来创建通用特性。PCL功能是模板类。必须使用输入类型(要计算它们的数据类型)和输出类型来实例化它们。输入类型通常是pcl::PointCloud,所以我认为这不是问题。对于输出,我使用Eigen::MatrixXf作为通用输出类型。 然而,我有一些奇怪的错误

我写了一个简单的例子,它使用了一些typedef,以便更容易修改:

#include <pcl/point_types.h>
#include <pcl/features/normal_3d.h>
#include <pcl/features/fpfh.h>

typedef pcl::PointXYZ  Input_T;
//#define USE_EIGEN
#ifdef USE_EIGEN
#warning "USING EIGEN"
typedef Eigen::MatrixXf Output_T;
#else
typedef pcl::PointNormal Output_T;
#endif

int main()
{
  pcl::Feature<Input_T, Output_T>* q = new pcl::NormalEstimation<Input_T, Output_T>;
}
如果按原样编译,它应该可以工作。如果取消注释第7行,它将不再工作。 GCC给出的错误为:

tmp/test.cc:16:49: erreur: cannot convert ‘pcl::NormalEstimation<pcl::PointXYZ, Eigen::Matrix<float, -0x00000000000000001, -0x00000000000000001> >*’ to ‘pcl::Feature<pcl::PointXYZ, Eigen::Matrix<float, -0x00000000000000001, -0x00000000000000001> >*’ in initialization
我在Ubuntu12.04下使用PCL1.6和GCC4.6.3

你知道怎么回事吗?
我询问了PCL用户邮件列表,但没有成功。

奇怪的是,它与MatrixXd而不是MatrixXf一起工作。我认为这与一些我可以用MatrixXd编译它的东西有关,但无法链接:[vtable for pcl::NormalEstimation]+0x1c:未定义对“`pcl::NormalEstimation::computeFeaturepcl::PointCloud&”的引用。此外,在这种情况下,我不能使用这是最终的目标。我已经阅读了你发送的链接,但我不明白为什么这会导致错误,除了这个事实,我应该是为高级用户。