2017-09-11 29 views
0

PCLのKdTreefLANNクラスで半径検索を使用しようとしています。だから最初のステップとして、私はチュートリアルhereに忠実に従った。しかし、Visual Studio Codeは31行目で不完全な型が許可されていないと不平を言っています。これはPointCloudのウェブサイトの正確なコードなので、どこで失敗するのか分かりません。pcl :: PointXYZ型が不完全です

LinuxマシンでPCL 1.7、GCC 5(.4、私は思う)を使用しています。インクルードはVSコードで検出されたようです。このエラーはコンパイル前に発生します。以下のコードスニペットをコンパイルするとエラーは発生しませんが、不運にもチュートリアルスクリプト全体のコンパイルにはいくつかのエラー(別の問題)が発生して失敗するため、動作が期待どおりであればテストできません。

私の質問:

  • 警告を意味している "不完全な型は許されない" は何?
  • どこから来たのですか?
  • それにもかかわらず、コンパイルに成功した場合(VSコード/ IntelliSenseの問題)

コードスニペットは:

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: } 
+1

どの行が31行目ですか? * exact *コンパイラの出力は何ですか? – cdhowie

+0

申し訳ありませんが、リンクの例の行番号を入力しました。どのラインが31であるかは明確になるはずです。 – niak

答えて

0

型が完全に成功するために建物のリンク段階のために定義する必要があります。あなたのプログラムは#include文がpcl::PointXYZへの前方参照のみを持つので、型が不完全に定義されたままになります。

完全定義の場合#include <pcl/point_types.h>

+0

リンク段階でさえも。コンパイラは、 'searchPoint'に割り当てるスペースや、x/y/zメンバが存在するかどうか、型の種類を知らないので、コンパイルの段階は成功できません。 – cdhowie

+0

ありがとうございますが、' point_types。残念ながらその現象は変わらない(少なくとも私のためではない)。また、これはチュートリアルのコードなので、必要なものはすべてそこに含まれるべきではありませんか?もちろん間違いかもしれませんが、誰かが気づいたと思います。 'point_types.hpp'ファイルを開くとき、VSコードは' struct _PointXYZ'(タグ種別の組合はクラスの定義と互換性がありません)と 'EIGEN_ALIGN16'の定義に誤りがあります。 Eigenの 'Macros.h'で' __CUDACC__'が定義されていない場合、推測を定義することはできません)。 – niak

関連する問題