3

OpenCV 2.4.2 と Point Cloud Library 1.6.0 を使用しています。

行を追加するまで、私のプログラムは正常に動作しています...

#include <pcl/segmentation/segment_differences.h>

これにより、コンパイルしようとするとエラーが発生します。私は...

Error   93  error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h  424
Error   94  error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h  425
Error   95  error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h  427
Error   96  error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h  514
Error   97  error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h  520

C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl/kdtree/kdtree_flann.h(520): error C2872: 'flann' : ambiguous symbol
              could be 'flann'
              or       'cv::flann'

そのため、OpenCV に付属の Flann ファイルが PCL の Flann ファイルと競合しているようです。

助言がありますか?

編集

PCL、OpenCV、およびflannの競合についても同様の質問がありますが 、少し異なるエラーです...

編集 2

そのため、以前に持っていた main.cpp ファイルに

名前空間 pcl を使用します。名前空間 cv を使用します。

これら 2 つをコメントアウトし、cv::Mat などを使用するようにプログラムを更新しました。

しかし、追加するとコンパイル中にエラーが発生します...

#include <pcl/segmentation/segment_differences.h>

C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl/kdtree/kdtree_flann.h(520): error C2872: 'flann' : ambiguous symbol 
          could be 'flann' 
          or       'cv::flann'

include\opencv2\flann\ の名前を include\opencv2\flanncv\ に変更し、一連の opencv ヘッダーのインクルードをこの新しい flanncv ディレクトリに更新しようとしました。私はまだ上記のエラーが発生しています...

4

3 に答える 3

4

したがって、再構築せずにこれを修正するには、null 名前空間を追加します。

flann::something のインスタンスを ::flann::something に変更します

cv名前空間ではなく、グローバル名前空間を使用するように効果的に伝えていると思います。

于 2012-09-19T12:07:03.670 に答える
0

さて、私はLinuxでpclとopenCvを使用していますが、ここに行きます

問題は、名前空間 flann が定義されているヘッダー ファイル flann/flann.hpp または同様のファイルが両方のライブラリに含まれていることです。

ライブラリがあなたのマシンにどのようにインストールされているかはわかりませんが、インストール可能なバージョンの pcl と openCv を使用していたので、それぞれに独自の flann ライブラリが付属していたと仮定します。

通常、両方のライブラリの CMakeLists には、次のような flann ライブラリを検索する行があります: INCLUDE_LIBRARY($(flann) REQUIRED)

解決策は、インストールされている 2 つのライブラリ pcl と openCv を削除することです。次に、flann を Web サイトからダウンロードしてインストールします。次に、openCv と pcl のナイトリー ビルドをダウンロードし、それらをコンパイルすると、両方とも同じ flann インスタンスを見つけることができるため、問題が解決する可能性があります。

編集: もう1つのアイデアです。コードで使用したため、問題が発生する可能性があります:

using namespace pcl;
using namespace cv;

したがって、flann 名前空間から 2 つの異なるインスタンスがあります。「名前空間を使用する」の両方を削除し、代わりにコード pcl::thepclclass、cv::theopencvclass で使用して、これが役立つかどうかを確認します

幸運を

于 2012-09-18T17:01:20.167 に答える
0

::解決策は単純に、flann の前に( ) のように二重コロンを追加することです。そうすれば、すべてうまくいきます。

たとえば、次のとおりです。

flann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);

なりました:

::flann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);
于 2014-04-14T17:49:37.303 に答える