Ошибка визуализации PCL

#ifndef VIEWER_H
#define VIEWER_H

#include <iostream>
#include "../../Spheres/spheres.h"#include "../../Odometry/odometry.h"#include "../io/io.h"
#include <limits>
#include <utility>
#include <algorithm>
#include <time.h>

#include <cv.h>
#include <opencv/highgui.h>
#include <opencv2/core/eigen.hpp>

#include <Eigen/Dense>
#include <Eigen/SVD>
#include <Eigen/LU>
#include <unsupported/Eigen/MatrixFunctions>

#include <boost/thread/thread.hpp>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/common/common_headers.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/filters/passthrough.h>
#include <pcl/common/transforms.h>
//#include <pcl/registration/icp.h>             // conflict with opencv flann
//#include <pcl/features/normal_3d.h>           // conflict with opencv flann
//#include <pcl/features/integral_image_normal.h>  // conflict with opencv flann

//const double pi = M_PI;
class Viewer{
public:
pcl::PointCloud<pcl::PointXYZRGB> cloud, globalmap;
pcl::PointXYZRGB point;
pcl::PassThrough<pcl::PointXYZRGB> filter_pass_x, filter_pass_y, filter_pass_z;
pcl::VoxelGrid<pcl::PointXYZRGB> filter_voxel;

boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));

void viewgenpcl(Sphere &S, Odometry &Odo);

};

#endif // VIEWER_H

Источником ошибки является строка кода:

boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
Ошибка: ожидаемый идентификатор перед «новым»
Ошибка: ожидается «,» или «...» перед «новым»

Я не уверен, исходит ли эта инициализация от boost или pcl, хотя я использовал ту же строку в других файлах, и это сработало. Спасибо за любую помощь, которую вы могли бы предоставить.

1

Решение

До C ++ 11 вы не могли инициализировать переменные-члены на месте, и тогда вы должны использовать присваивание:

boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer =
boost::make_shared<pcl::visualization::PCLVisualizer>(new pcl::visualization::PCLVisualizer ("3D Viewer"));

Или вы можете инициализировать членов в конструкторе список инициализации членов:

class Viewer{
public:
...

boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;

...

Viewer()
: viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"))
{}
};
2

Другие решения


По вопросам рекламы [email protected]