代码之家  ›  专栏  ›  技术社区  ›  user3535719

PCL可视化错误

  •  1
  • user3535719  · 技术社区  · 10 年前
    #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"));
    
    Error: expected identifier before 'new'
    Error: expected ',' or '...' before 'new'
    

    我不确定这个初始化是来自boost还是pcl,尽管我在其他文件中使用了相同的行,并且它起了作用。感谢您提供的任何帮助。

    1 回复  |  直到 10 年前
        1
  •  2
  •   Some programmer dude    10 年前

    在C++11之前,您无法就地初始化成员变量,然后必须使用赋值:

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

    或者可以在构造函数中初始化成员 member initialization list :

    class Viewer{
    public:
        ...
    
        boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
    
        ...
    
        Viewer()
        : viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"))
        {}
    };
    
    推荐文章
    user3535719  ·  PCL可视化错误
    10 年前