|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
以下是一个大概的程序结构,我运行的时候一直报段错误,但是把初始化指针放在函数内部就没有问题,不知道是哪里的问题?
// point_cloud_yz.h文件
class PointCloudYZ
{
private:
public:
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud; //Ptr是pcl定义的一个类型,会返回一个smart point
PointCloudYZ();
~PointCloudYZ();
int loadPCD();
};
#endif
#include "point_cloud_yz.h"
//point_cloud_yz.cpp文件
PointCloudYZ::PointCloudYZ()
{
cloud = pcl::PointCloud<pcl::PointXYZ>::Ptr(new pcl::PointCloud<pcl::PointXYZ>);
}
int loadPCD()
{
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;
test->loadPCD();
}
在代码中,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; // 在程序结束前需要释放指针
- }
复制代码
有用请设置最佳答案
|
|