如何解决c++中的命名空间冲突?
how do I solve namespace conflict in C++?
我使用Win7系统和Visual Studio 2010。我使用的是OpenCV,有一个嵌入的flann命名空间。
但我也使用了一个原始的FLANN包http://people.cs.ubc.ca/~mariusm/index.php/FLANN/FLANN。
我按照用户手册使用
编译FLANN> "C:Program FilesMicrosoft Visual Studio 10.0VCvcvarsall.bat"
> cd flann-x.y.z-src
> mkdir build
> cd build
> cmake -G "NMake Makefiles" ..
我在VS2010项目中添加了FLANN文件夹:c++ folder->include directories
所以当我写c++代码并想要使用"flann"命名空间时,会出现命名空间冲突错误。
我怎样才能解决这个问题?
可能最可靠的解决方案是重命名其中一个名称空间。您说您已经编译了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
。
将现有的'flann'命名空间包装到一个新的命名空间中,然后使用完全限定语法引用它。
相关文章:
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- C++ |匿名命名空间与命名空间 std 冲突
- 分解SWIG Python接口 - 容器会产生命名空间冲突
- 如何解决两个不使用命名空间的第三方库之间的类名冲突?
- 调用 ADL 时,表达式和命名空间之间是否会发生冲突
- 类名和枚举值之间的冲突:无需命名空间即可解析
- C++当命名空间、类名和命名空间::类名冲突时该怎么办
- C++ 中的命名空间冲突
- 避免与具有相同名称的两个类发生命名空间冲突
- 命名与多个命名空间冲突
- 命名空间中的类名冲突
- ctime std::命名空间冲突
- 如何避免 C 和 C++ 中的命名空间冲突
- C++ 当命名空间发生冲突时,为什么结构/类不与变量和函数发生冲突?
- 我收到void main()和使用命名空间std;之间的冲突;?我正在使用代码块
- 全局作用域枚举和命名空间冲突
- 如何解决c++中的命名空间冲突?
- 不明确的引用和命名空间(来自两个外部库的定义冲突)
- 命名空间,类成员ADL冲突
- 在c++中命名命名空间的最佳方法//当名称冲突时该怎么做