「已注销」 2023-04-25 10:02 采纳率: 0%
浏览 18

pcl八叉树模块提问

在使用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>的子类,为什么子类对象无法访问到父类中受保护的方法?

  • 写回答

2条回答 默认 最新

  • Leodong. 2023-04-25 10:16
    关注

    该回答通过自己思路及引用到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>::来指定函数是在哪个类中定义的。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论

报告相同问题?

问题事件

  • 创建了问题 4月25日

悬赏问题

  • ¥15 bat批处理,关于数据复制问题
  • ¥50 同步两个不同结果的array中某些属性
  • ¥15 悬赏15远程操控解决问题
  • ¥15 CST复制的模型无法单独修改参数?
  • ¥15 前端页面想做个定时任务,但是使用requestAnimationFrame,setinterval和settimeout都不行
  • ¥15 根据以下文字信息,做EA模型图
  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)