如何定义全局命名空间,类似于全局变量(通过extern
关键字)?我尝试了以下方法,但它不起作用:
//header
#ifndef ASD_H
#define ASD_H
namespace Goo
{
int var;
}
#endif
这个头文件我将包含在所有.cpp
需要访问命名空间的文件中。这不起作用。这是如何正确完成的?
如何定义全局命名空间,类似于全局变量(通过extern
关键字)?我尝试了以下方法,但它不起作用:
//header
#ifndef ASD_H
#define ASD_H
namespace Goo
{
int var;
}
#endif
这个头文件我将包含在所有.cpp
需要访问命名空间的文件中。这不起作用。这是如何正确完成的?
默认命名空间是全局命名空间。只是不要显式添加namespace
代码。
话虽如此,您之所以这么问,是因为您不了解命名空间的工作原理。他们的工作是清除范围。它们不是对象。它们不指向任何记忆。他们像那样非常“柔软”。任何文件都可以声明一个命名空间,并且出现在其中的任何类、结构、函数等都将成为该命名空间的一部分。不同的文件不需要通信它们共享相同的命名空间;如果文本相同,则它是相同的命名空间。
回复您的评论:
namespace One {
intvar1;
}
namespace Two {
int var2;
}
然后可以在其他翻译单元中以One::var1
和访问它Two::var2
,就像它们不在命名空间中并且您键入var1
或一样var2
- 这意味着您仍然负责extern
在必要时声明等。
此外,您可以使用namespace Base::One
或者Base::Two
如果您有一个通用的基本命名空间。