我将Win7系统与Visual Studio 2010一起使用。我正在使用OpenCV,并且有一个嵌入式flann namespace 。
但是我还使用了原始的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” namespace 时,会出现 namespace 冲突错误。
我该如何解决这个问题?
最佳答案
可能最可靠的解决方案是重命名 namespace 之一。您说您已经编译了flann
-在这种情况下,您可以重命名它的命名空间,然后再次重新编译。
也许您可以通过小的修改就可以重用Boost.BCP tool-它具有 namespace 重命名功能。
或者,如果您在flann
中看到一些常见的模式-那么您可以尝试通过简单的全局搜索和替换来重命名它。重命名后,执行diff
以确保仅重命名了所需的部分,并执行grep
以确保重命名了所有所需的位置。
另一种选择是在编译flann
的过程中定义预处理器宏,该宏将重命名 namespace ,例如:
#define flann flann_vanilla
并将其添加到编译器选项中,例如:
-Dflann=flann_vanilla
在这种情况下,您应该将每个
flann
header 的内容包装为:#define flann flann_vanilla
#include "flann.hpp"
#undef flann
另外,如果那些重复的 namespace 来自同一库(可能是不同版本),则请注意可能存在的预处理器宏冲突,尤其是包含保护的冲突。包含卫兵冲突的最简单解决方案是使用特定于实现的
#pragma once
。