点云 error: ‘index_t’ is not a member of ‘pcl’+官方demo学习的坑

文章描述了一位用户在按照PCL官方教程学习并尝试编译随机样本共识模型时遇到的问题。问题源于代码示例与用户本地PCL库版本不匹配导致的编译错误。解决方案是查阅对应版本的文档或直接使用本地PCL库中的源代码进行调试,并在相应版本的测试目录下寻找资源文件。
摘要由CSDN通过智能技术生成

一、问题描述

  

   正在学习poinclouds 根据官方的教程调试,正常的学习,是根据下面的教程,安步就班的创建文件random_sample_consensus.cpp, 创建CMakeLists.txt  文件,创建mkdir build  cmake .. 再make,然后就各种报错,本来就不懂,一堆搜索,最后还是没有解决,痛苦...... 怎么解决

如:

如何使用随机样本共识模型 — 点云库 0.0 文档 (pcl.readthedocs.io)

https://pcl.readthedocs.io/projects/tutorials/en/master/random_sample_consensus.html#random-sample-consensus

 

报的错!

Scanning dependencies of target random_sample_consensus
[ 50%] Building CXX object CMakeFiles/random_sample_consensus.dir/random_sample_consensus.cpp.o
/home/dltc/workspace/pcl-test/random_sample_consensus.cpp: In function ‘int main(int, char**)’:
/home/dltc/workspace/pcl-test/random_sample_consensus.cpp:42:14: error: ‘index_t’ is not a member of ‘pcl’
   42 |    for (pcl::index_t i = 0; i < static_cast<pcl::index_t>(cloud->size ()); ++i)
      |              ^~~~~~~
/home/dltc/workspace/pcl-test/random_sample_consensus.cpp:42:29: error: ‘i’ was not declared in this scope
   42 |    for (pcl::index_t i = 0; i < static_cast<pcl::index_t>(cloud->size ()); ++i)
      |                             ^
/home/dltc/workspace/pcl-test/random_sample_consensus.cpp:42:50: error: ‘index_t’ in namespace ‘pcl’ does not name a type
   42 |    for (pcl::index_t i = 0; i < static_cast<pcl::index_t>(cloud->size ()); ++i)
      |                                                  ^~~~~~~
make[2]: *** [CMakeFiles/random_sample_consensus.dir/build.make:63: CMakeFiles/random_sample_consensus.dir/random_sample_consensus.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/random_sample_consensus.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
dltc@dltc-ros-dev:~/workspace/pcl-test/build$ cmake --version
cmake version 3.16.3

CMake suite maintained and supported by Kitware (kitware.com/cmake).
dltc@dltc-ros-dev:~/workspace/pcl-test/build$ 

二、问题分析

    经过分析发现最官网上复制下来的,一般是最新的pcl sdk ,如果您本地测试的时候用的是命令直接安装的版本,理论是可以的,(但是我们一般在正式环境尤其找到别的源代码时都是比较老,至少是次新版本的pcl sdk ,)总之你的pcl版本不是新的版本,所以你的demo在 cmake .. 后 ,make 时就总是不会通过,

    有什么别的搞头吗?没有,运行poinclouds demo 就三个动作

  

1.mkdir build 
  cd build
2.cmake ..

3. make

 

所以,我们我们经过思考就明白了,如果您的环境不最新的,就不要复制官方的代码了?

大家可能不信,我们来对比一下,个人环境和最新demo代码的截图

我的环境 pcl 1.7.2        

 

 

  从第一个对比就可以看出,两个版本连类库头文件都不一样?

 

  所以上面报错的error: ‘index_t’ is not a member of ‘pcl’, ‘i’ was not declared in this scope 等自然而然就明白是什么原因了

拖动对比

 

 

 

 三、问题解决

    所以我们在官网查看时, 要么切到对应版本查看,要么只看官网的目录,代码调试找到我们调试环境pcl sdk目录下找

 3.1.demo源代码目录

  pcl-pcl-1.x.x\doc\tutorials\content\sources

如我的 是1.7.2

       pcl-pcl-1.7.2\doc\tutorials\content\sources

 3.2 demo源代码用的资源文件如点云pcd等

资源文件到pcl-pcl-1.x.x\test 目录下找,如我的是1.7.2

如:pcl-pcl-1.7.2\test

 

四、总结

            经过探索后,我们对点云官方demo如何学习,如何调试,如何避过报错,如何快速找到demo中用到的资源文件都轻松解决了,大家可以快速把点云demo每一个运行一下,尽快入门和熟悉点云类库 ,在此备忘,并且希望能帮大家节约一点时间

   正确的方式,才是避开各种报错的方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值