我想在项目中使用an available public code评估算法。我已将算法需要的files集成到我的项目中:kodtree.h
,kodtree.cpp
,pinpolyhedron.h
和pinpolyhedron.cpp
。但是,编译器抱怨模棱两可的符号。我将模棱两可的变量名更改为其他名称,并且编译器毫无问题地对其进行了编译。这种方法看起来不像解决问题的一种优雅方法。
我当时在考虑使用namespace
,但发现例如文件kodtree.h
有几个extern
。
namespace
会给我带来麻烦,因为它们可以包含extern
吗? namespace
是正确的方法吗?kodtree.h
,kodtree.cpp
,pinpolyhedron.h
和pinpolyhedron.cpp
放入该类中,还是更好)将它们设为私有?任何提示,我将不胜感激。
答案 0 :(得分:2)
使用名称空间是正确的方法吗?
是的,但不是您尝试执行此操作的方式。库本身应该正确地命名空间,但有时由于各种原因它们不能或不可以。最好保留它们,除非您打算围绕库代码编写一个完整的包装器。
我们总是可以应用一些纪律和命名空间我们自己的代码。简而言之,我们可以在我们自己的每个源文件中做这样的事情 1 :
#include <some_library.h>
#include <my_other_project_header.h>
namespace ProjectName { namespace ModuleName {
// Your code here
}}
这样,您的代码就可以很好地与所包含的内容隔离。除非有任何extern "C"
事物,否则不应有冲突。无论库头拖动到什么位置,都不会与您在命名空间内编写的代码发生冲突。始终,您的代码可以引用最多具有一个限定级别的项目实体(Module1
中的代码可以引用Module2::Foo
,也可以简单地Module1::Bar
引用Bar
) 。除此之外,您始终可以通过完全限定事物或使用使用声明来引用Project
命名空间之外的事物。
1:如果您的编译器支持C ++ 17,那么它可能更合适:
namespace ProjectName::ModuleName {
}