我在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 ++ folder->包含目录
因此,当我编写C ++代码并希望使用“flann”命名空间时,会出现名称空间冲突错误。
我怎么能解决这个问题?
答案 0 :(得分:2)
可能最可靠的解决方案是重命名其中一个命名空间。你说你编译了flann
- 在这种情况下,你可以重命名它的命名空间,然后重新编译。
也许您可以通过小修改重用Boost.BCP tool - 它具有命名空间重命名功能。
或者如果您在flann
中看到一些常见模式 - 那么您可以尝试通过简单的全局搜索和替换来重命名它。重命名后,执行diff
以确保只重命名所需的部分,然后执行grep
以确保重命名所有需要的地点。
另一种选择是在编译flann
期间定义预处理器宏,它将重命名命名空间,如:
#define flann flann_vanilla
并将其添加到编译器选项中,如:
-Dflann=flann_vanilla
在这种情况下,您应该将每个flann
标头包含在:
#define flann flann_vanilla
#include "flann.hpp"
#undef flann
此外,如果这些重复的命名空间来自同一个库(可能是不同的版本) - 请注意可能的预处理器宏冲突,尤其是包含保护的冲突。包含保护冲突的最简单解决方案是使用特定于实现的#pragma once
。
答案 1 :(得分:0)
将现有的'flann'命名空间包装在新的命名空间中,然后使用完全限定的语法引用它。