C++:在命名空间中的多个文件中使用typedef.

use*_*871 1 c++ namespaces header-files

我正在跨多个文件定义命名空间.在一个文件中,在命名空间内我声明了一个名为MyType的类型.在另一个文件中,仍然在命名空间内,我不应该看到该类型,而不必包含头文件?以下是一个例子:

FILE A
namespace EE
{
    typedef int MyType;
}


FILE B
namespace EE
{
    MyType a = 10;
}
Run Code Online (Sandbox Code Playgroud)

同样,根据我的理解,命名空间有助于清理包含.如果我定义了一个30个文件将使用的类型,如果我使用命名空间,我不应该在所有这些文件中包含标题,或者我认为.

Kir*_*lev 6

引入命名空间来对抗名称冲突的问题.差不多就是这样.编译一个文件时,会生成一个目标文件.来自此目标文件的信息在编译下一个文件时并未丰富编译器的知识.这意味着您需要将您的typedef定义作为一些标题的一部分包含在每个C/C++文件中.如果你的typedef是命名空间的一部分并不重要.

请注意,typedef是"一个定义规则"的例外.您可以在一个翻译单元中使用多个相同的typedef,如下所示:

typedef int MyInt;
....
typedef int MyInt;
Run Code Online (Sandbox Code Playgroud)

这不会导致语法错误.

导出模板的"不丰富知识"规则有一个例外.但这仅适用于模板,编译器不支持此功能.经过深思熟虑后,它甚至被从标准中删除了.