C++ : Using typedefs across multiple files in a namespace.

标签 c++ namespaces header-files

我正在跨多个文件定义命名空间。在一个文件中,我在命名空间内声明了一个名为 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/

相关文章:

PHP 与命名空间和 Smarty 错误 : unknown tag "cycle"

c# - 命名空间问题

c++ - 在 ';' 之前缺少 'template<'

c++ - 抽象类的迭代器

xml - 从 WCF Restful 响应中删除 xml 命名空间

c++ - 从 64 字节数组中查找字节的最快方法

c++ - C++ 链接步骤中的 undefined reference 错误

c - 在多个编译单元的情况下,避免由于包含相同的头文件而导致多重定义

c++ - 从 pcl::PointCloud<pcl::PointXYZRGB> 中删除点

python - 使用python在c++中实现逻辑,如何?