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

4

我正在跨多个文件定义一个命名空间。在其中一个文件中,在命名空间内,我声明了一个名为MyType的类型。在另一个文件中并仍在命名空间中,我不需要包含头文件,就能看到那个类型吗?以下是一个例子:

FILE A
namespace EE
{
    typedef int MyType;
}


FILE B
namespace EE
{
    MyType a = 10;
}

根据我的理解,命名空间有助于清理包含文件。如果我定义了一个将被30个文件使用的类型,如果我使用命名空间,我不需要在所有这些文件中都包含头文件,至少我是这样认为的。


7
不,你误解了命名空间。你仍需要包含头文件。 - J-16 SDiZ
1个回答

8

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

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

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

这不会导致语法错误。

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


好的,那么在这种情况下我仍然需要使用包含文件。好的。 - user947871

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接