在我将 class 实例移动到 class 成员后,无法初始化它?

Cannot initialize a class instance, after I move it to a class member?

这个有效:

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud2 (new pcl::PointCloud<pcl::PointXYZ>);

但这不起作用:

Class.h,私有变量

  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;

Class.cpp, 在构造函数中

cloud (new pcl::PointCloud<pcl::PointXYZ>);

生成失败:

 error: no match for call to ‘(pcl::PointCloud<pcl::PointXYZ>::Ptr {aka boost::shared_ptr<pcl::PointCloud<pcl::PointXYZ> >}) (pcl::PointCloud<pcl::PointXYZ>*)’
     cloud (new pcl::PointCloud<pcl::PointXYZ>);

为什么两者不一样?从 .cpp 中看到的唯一区别是一个是左边的类型(声明),一个已经在 .h 中声明,但错误似乎抱怨参数,尽管我使用完全相同的参数。

我认为你是在构造函数体中初始化它而不是在成员初始化列表中:

struct A{

    A(int){} 

    A(){}
};

struct B
{
    A a;

    B(): a(52) //correct syntax
    {
        a(52); //error: no match for call to...
    }
};



int main()
{    
    A a(5); //ok this works
}

你必须放置 cloud (new pcl::PointCloud<pcl::PointXYZ>);

在您的 Class 成员初始值设定项列表中:

Class(): cloud (new pcl::PointCloud<pcl::PointXYZ>)
{
//constructor body
}