我正在跨多个文件定义命名空间。在一个文件中,我在命名空间内声明了一个名为 MyType 的类型。在另一个文件中并且仍在命名空间中,我不应该能够看到该类型,而不必也包含头文件吗?下面是一个例子:
FILE A
namespace EE
{
typedef int MyType;
}
FILE B
namespace EE
{
MyType a = 10;
}
同样,据我所知,命名空间有助于清除包含。如果我定义了 30 个文件将使用的类型,如果我使用的是命名空间,我就不必在所有文件中包含 header ,或者我是这么认为的。
最佳答案
引入 namespace 是为了解决名称冲突问题。差不多就是这样。编译一个文件时,会生成一个目标文件。在编译下一个文件时,来自这个目标文件的信息并没有丰富编译器的知识。这意味着您需要将 typedef
定义作为某些 header 的一部分包含在每个 C/C++ 文件中。您的 typedef 是否是命名空间的一部分并不重要。
请注意,typedef 是“单一定义规则”的异常(exception)。您可以在一个翻译单元中拥有多个相同的 typedef,如下所示:
typedef int MyInt;
....
typedef int MyInt;
这不会导致语法错误。
对于导出的模板,“不丰富知识”的规则有一个异常(exception)。但这仅适用于模板,编译器不支持此功能。经过商议,甚至将其从标准中删除。
关于C++ : Using typedefs across multiple files in a namespace.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11180432/