在使用CLion时,使用pcl八叉树获得根结点时,最后一行报错。
float resolution = 0.01f;
pcl::octree::OctreePointCloud<pcl::PointXYZ> octree(resolution);
octree.setInputCloud(cloud);
octree.addPointsFromInputCloud();
// 获取根节点
pcl::octree::OctreeNode* root = octree.getRootNode();
报错
'getRootNode' is a protected member of 'pcl::octree::OctreeBase<pcl::octree::OctreeContainerPointIndices>'
但是pcl::octree::OctreePointCloud<pcl::PointXYZ>
是pcl::octree::OctreeBase<pcl::octree::OctreeContainerPointIndices>
的子类,为什么子类对象无法访问到父类中受保护的方法?
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
在C++中,子类可以访问父类的公共成员和受保护成员,但不能访问私有成员。所以理论上说,子类对象可以访问父类中受保护的方法。但在这个问题中,getRootNode
函数是pcl::octree::OctreeBase
类中受保护的成员函数,而不是pcl::octree::OctreePointCloud
类中的公共或受保护成员函数。因此,它不能直接从pcl::octree::OctreePointCloud
对象中访问。
受保护的成员函数只能被类本身和其子类的成员函数访问,而不能被类对象或其他非成员函数访问。因此,在这个问题中,可以通过在pcl::octree::OctreePointCloud
类的子类中添加一个公共成员函数来访问getRootNode
函数。例如,可以在子类中添加如下代码:
pcl::octree::OctreeNode* getRoot() {
return this->getRootNode();
}
然后就可以通过子类对象调用该函数来访问getRootNode
函数了。例如:
pcl::octree::OctreePointCloud<pcl::PointXYZ> octree(resolution);
// ...
pcl::octree::OctreePointCloud<pcl::PointXYZ>::OctreeNode* root = octree.getRoot();
在这个示例中,getRoot
函数是在pcl::octree::OctreePointCloud
类的子类中添加的,它调用了父类中的getRootNode
函数来获取根节点。注意,在函数名后面需要加上pcl::octree::OctreePointCloud<pcl::PointXYZ>::
来指定函数是在哪个类中定义的。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
clion与搜狗输入法冲突,一运行clion就卡死,卸载搜狗吧,装别的输入法,我用的谷歌pinyin。