Доступ к облаку, который имеет тип boost: shared_ptr падает с ошибкой утверждения: px! = 0 ошибка вне основного, но внутри основного все нормально.
Я собираюсь использовать PCL в программе Qt, где мне нужен доступ к указателю на облако вне области, где этот указатель объявлен как f.ex в MainWindow :: classxyz (), поэтому я написал этот тестпрограмма для иллюстрации моей проблемы (см. ниже)
Как правильно использовать указатель, чтобы иметь возможность доступа к указателю облака также вне области действия main?(и Qt вне области MainWindow: MainWindow (), поскольку я инициализирую указатель в конструкторе)
pcd_read.h:
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
void outside();
pcd_read.cpp:
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include "pcd_read.h"
int
main (int argc, char** argv)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ> ("C:/Users/user2/Documents/qt_test_kode_div/pcd_file_scope_test/build/Debug/test_pcd.pcd", *cloud) == -1) //* load the file
{
PCL_ERROR ("Couldn't read file test_pcd.pcd \n");
return (-1);
}
std::cout << "Loaded "
<< cloud->width * cloud->height
<< " data points from test_pcd.pcd with the following fields: "
<< std::endl;
std::cout << cloud->size(); //This works
outside(); //When I call outside() the code crashes inside outside()
for (size_t i = 0; i < cloud->points.size (); ++i)
std::cout << " " << cloud->points[i].x
<< " " << cloud->points[i].y
<< " " << cloud->points[i].z << std::endl;
return (0);
}
void outside()
{
std::cout << cloud->size(); // This crashes. Why does accessing cloud cause a crash related to Boost? Assertion failed: px != 0
// The pointer seems to not be initialized.
// I want the pointer to be accessible also in outside without passing as a parameter. How can I achieve that?
}