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

时间:2012-06-24 19:12:42

标签: c++ namespaces header-files multiple-files

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

FILE A
namespace EE
{
    typedef int MyType;
}


FILE B
namespace EE
{
    MyType a = 10;
}

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

1 个答案:

答案 0 :(得分:6)

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

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

typedef int MyInt;
....
typedef int MyInt;

这不会导致语法错误。

导出模板的“不丰富知识”规则有一个例外。但这仅适用于模板,编译器不支持此功能。经过审议后,它甚至被从标准中移除。