3

我正在跨多个文件定义一个命名空间。在一个文件中,在命名空间中,我声明了一个名为 MyType 的类型。在另一个文件中并且仍在命名空间中,我不应该能够看到该类型,而不必包含头文件吗?下面是一个例子:

FILE A
namespace EE
{
    typedef int MyType;
}


FILE B
namespace EE
{
    MyType a = 10;
}

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

4

1 回答 1

7

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

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

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

这不会导致语法错误。

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

于 2012-06-24T19:22:35.600 回答