【问题标题】:pcl::PointXYZ incomplete type not allowed不允许 pcl::PointXYZ 不完整类型
【发布时间】:2017-09-11 14:56:35
【问题描述】:

我正在尝试对 PCL 的 KdTreefLANN 类使用半径搜索。因此,作为第一步,我密切关注教程here。但是,Visual Studio Code 抱怨说,第 31 行不允许不完整的类型。由于这是来自 PointCloud 网站的确切代码,我不知道它在哪里失败。

我在 Linux 机器上使用 PCL 1.7、GCC 5(我认为是 .4)。包含似乎是由 VS Code 找到的。此错误发生在编译之前。编译下面的代码 sn-p 没有错误,但不幸的是整个教程脚本的编译失败并出现一些错误(不同的问题),所以我无法测试,如果行为符合预期。

我的问题:

  • “不允许的不完整类型”警告是什么意思?
  • 它来自哪里(在这种情况下)?
  • 如果编译成功,是否可能导致意外行为(即这只是 VS Code/IntelliSense 的问题)?

代码sn-p:

1 : #include <pcl/point_cloud.h>
2 : #include <pcl/kdtree/kdtree_flann.h>

4 : #include <iostream>
5 : #include <vector>
6 : #include <ctime>

8 : int main (int argc, char** argv)
10: {
11:   srand (time (NULL));

31:   pcl::PointXYZ searchPoint;

33:   searchPoint.x = 1024.0f * rand () / (RAND_MAX + 1.0f);
34:   searchPoint.y = 1024.0f * rand () / (RAND_MAX + 1.0f);
35:   searchPoint.z = 1024.0f * rand () / (RAND_MAX + 1.0f);


81:   return 0;
82: }

【问题讨论】:

  • 第 31 行是哪一行? 确切的编译器输出是什么?
  • 抱歉,我在链接中输入了示例中的行号。现在应该清楚哪一行是 31。

标签: c++ visual-studio-code intellisense point-cloud-library


【解决方案1】:

需要完全定义类型才能使构建的链接阶段成功。您的程序未完全定义类型,因为您拥有的 #include 语句只有对 pcl::PointXYZ 的前向引用。

完整的定义需要#include &lt;pcl/point_types.h&gt;

【讨论】:

  • 连链接阶段都没有。编译阶段不能成功,因为编译器不知道要为searchPoint分配多少空间,也不知道x/y/z成员是否存在,也不知道它们的类型...
  • 谢谢,但不幸的是,包括point_types.h 并没有改变这种现象(至少对我来说不是)。另外,由于这是教程中的代码,不应该包含所有必要的内容吗?当然可能是一个错误,但我想有人会注意到。当我打开point_types.hpp 文件时,VS Code 在struct _PointXYZ 的定义中看到一个错误(联合的标记类型与类的定义不兼容......)和EIGEN_ALIGN16 的定义(我猜无法定义)如果 __CUDACC__ 在 Eigen 的 Macros.h 中未定义)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
  • 2013-10-26
  • 1970-01-01
相关资源
最近更新 更多