Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:跨命名空间中的多个文件使用typedef。_C++_Namespaces_Header Files - Fatal编程技术网

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

C++ C++;:跨命名空间中的多个文件使用typedef。,c++,namespaces,header-files,C++,Namespaces,Header Files,我正在跨多个文件定义名称空间。在一个文件中,我在名称空间中声明了一个名为MyType的类型。在另一个文件中,仍然在名称空间中,我是否应该能够看到该类型,而不必同时包含头文件?以下是一个例子: FILE A namespace EE { typedef int MyType; } FILE B namespace EE { MyType a = 10; } 同样,据我所知,名称空间有助于清理包含。如果我定义了一个30个文件将使用的类型,那么如果我使用的是名称空间,我就不必在所

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

FILE A
namespace EE
{
    typedef int MyType;
}


FILE B
namespace EE
{
    MyType a = 10;
}

同样,据我所知,名称空间有助于清理包含。如果我定义了一个30个文件将使用的类型,那么如果我使用的是名称空间,我就不必在所有文件中都包含头,至少我是这么想的。

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

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

typedef int MyInt;
....
typedef int MyInt;
这不会导致语法错误


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

不,您误解了名称空间。您仍然需要包含headerOK,因此在本例中我仍然需要使用includes。那好吧。