在代码中,loadPCD函数定义是在类外部实现的,它没有指定所属的类,因此编译器将其视为全局函数。由于loadPCD函数没有访问类成员变量,因此在该函数中没有定义类指针this,故访问到的cloud指针是未初始化的野指针。
解决方法是在loadPCD函数前添加“PointCloudYZ::”以说明loadPCD函数所属的类是PointCloudYZ。修改后代码如下:
// point_cloud_yz.h文件
class PointCloudYZ
{
private:
public:
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud; //Ptr是pcl定义的一个类型,会返回一个smart point
PointCloudYZ();
~PointCloudYZ();
int loadPCD();
};
#include "point_cloud_yz.h"
//point_cloud_yz.cpp文件
PointCloudYZ::PointCloudYZ()
{
cloud = pcl::PointCloud<pcl::PointXYZ>::Ptr(new pcl::PointCloud<pcl::PointXYZ>);
}
int PointCloudYZ::loadPCD() // 加上 PointCloudYZ:: 表示 loadPCD 函数属于 PointCloudYZ 类
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_test (new pcl::PointCloud<pcl::PointXYZ>);
std::cout << *cloud_test << std::endl; //这里是可以打印信息的
std::cout << *cloud << std::endl; //这里只是测试,因为程序运行时,这里有问题,会出现段错误,应该是野指针,推断是构造函数初始化有问题
}
PointCloudYZ::~PointCloudYZ()
{
}
//main.cpp
#include "point_cloud_yz.h"
int main(int argc, char **argv)
{
PointCloudYZ *test = new PointCloudYZ(); // 需要创建一个 PointCloudYZ 对象才能调用它的函数
test->loadPCD();
delete test; // 在程序结束前需要释放指针
}
有用请设置最佳答案 |