#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, хотя я использовал ту же строку в других файлах, и это сработало. Спасибо за любую помощь, которую вы могли бы предоставить.
До 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"))
{}
};