3

Visual Studio 2010 で Win7 システムを使用しています。OpenCV を使用しており、flann 名前空間が埋め込まれています。

しかし、オリジナルの FLANN パッケージhttp://people.cs.ubc.ca/~mariusm/index.php/FLANN/FLANNも使用しました。

ユーザーマニュアルに従って、次を使用してFLANNをコンパイルします

> "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
> cd flann-x.y.z-src
> mkdir build
> cd build
> cmake -G "NMake Makefiles" ..

VS2010 プロジェクトに FLANN フォルダーを追加しました: c++ フォルダー -> ディレクトリを含める

そのため、C++ コードを記述して「flann」名前空間を使用したい場合、名前空間の競合エラーが発生します。

どうすれば問題を解決できますか?

4

2 に答える 2

2

おそらく最も信頼できる解決策は、名前空間の 1 つを名前変更することです。あなたはコンパイルしたと言いflannました-そのような場合、名前空間の名前を変更して、再度コンパイルすることができます。

Boost.BCP ツールを少し変更して再利用できるかもしれません- 名前空間の名前変更機能があります。

または、一般的なパターンが見られる場合はflann、単純なグローバル検索と置換だけで名前を変更できます。名前を変更した後、diff必要な部分だけが名前変更されgrepていることを確認し、必要なすべての場所が名前変更されていることを確認してください。


flann別のオプションは、次のように、名前空間の名前を変更するコンパイル中にプリプロセッサ マクロを定義することです。

#define flann flann_vanilla

次のようなコンパイラ オプションに追加します。

-Dflann=flann_vanilla

この場合、すべてのflannヘッダーを次のようにラップする必要があります。

#define flann flann_vanilla
#include "flann.hpp"
#undef flann

また、これらの重複した名前空間が同じライブラリ (おそらく異なるバージョン) からのものである場合、プリプロセッサ マクロの衝突、特にインクルード ガードの衝突の可能性に注意してください。インクルード ガードの競合に対する最も簡単な解決策は、実装固有の を使用すること#pragma onceです。

于 2013-04-11T23:04:18.077 に答える