Преобразование в библиотеке облаков точек из собственного формата в формат с плавающей запятой; не найдена соответствующая функция

У меня есть, как мне кажется, довольно простой вопрос о преобразовании в библиотеке облаков точек из собственного типа данных в плавающий . Моя проблема, я думаю, связана с отсутствием опыта работы с шаблонами, типами данных и С++ в целом.

Это преобразование должно выполняться функцией copyToFloatArray as, определенной в документации. :

virtual void pcl::DefaultPointRepresentation‹ FPFHSignature33 >::copyToFloatArray ( const FPFHSignature33 & p, float * out
) const [встроенный, виртуальный]

Скопируйте данные точки из входной точки в массив с плавающей запятой.

Этот метод должен быть переопределен во всех подклассах.

Параметры:

p Точка ввода

out Указатель на массив с плавающей запятой.

Реализует pcl::PointRepresentation‹ FPFHSignature33 >.

Я попытался реализовать это следующим образом:

pcl::PointCloud<pcl::FPFHSignature33>::Ptr fpfhs (new pcl::PointCloud<pcl::FPFHSignature33> ());
// populate fpfh...
float **myArray;
pcl::DefaultPointRepresentation< pcl::FPFHSignature33 >::copyToFloatArray ( &fpfhs, &**myArray);

Ошибка, которая возникает во время компиляции, выглядит следующим образом:

/home/bc/PCL/pcd_read.cpp: In function ‘int main(int, char**)’:
/home/bc/PCL/pcd_read.cpp:68: error: no matching function for call to 
‘pcl::DefaultPointRepresentation<pcl::FPFHSignature33>::copyToFloatArray(boost::shared_ptr<pcl::PointCloud<pcl::FPFHSignature33> >*, float*)’
/usr/include/pcl-1.2/pcl/point_representation.h:254: note: candidates are: 
virtual void pcl::DefaultPointRepresentation<pcl::FPFHSignature33>::copyToFloatArray(const pcl::FPFHSignature33&, float*) const
make[2]: *** [CMakeFiles/pcd_read.dir/pcd_read.cpp.o] Error 1
make[1]: *** [CMakeFiles/pcd_read.dir/all] Error 2
make: *** [all] Error 2

Похоже, проблема в первом аргументе, передаваемом функции, но я не могу создать объект const FPFHSignature33 & p.

Кто-нибудь знает, верны ли эти подозрения, и если да, то в каком направлении я могу начать решать проблему?

Спасибо за любую помощь.


person Bill Cheatham    schedule 06.10.2011    source источник


Ответы (1)


Во-первых, вам нужно выделить память в вашем floatArray. Затем вам нужно разыменовать ptr fpfhs, используя *. наконец, там нет необходимости в массиве двойных указателей.

Вот исправленный код:

pcl::PointCloud<pcl::FPFHSignature33>::Ptr fpfhs (new pcl::PointCloud<pcl::FPFHSignature33> ());
// populate fpfh...
float *myArray = new float[ 3* point_count ];
pcl::DefaultPointRepresentation< pcl::FPFHSignature33 >::copyToFloatArray ( *fpfhs, myArray);
person crazyjul    schedule 06.10.2011