Sample.h
namespace Testing
{
enum Type
{
DATA = 0,
MORE_DATA
};
}
现在在Sample2.h中,使用相同的命名空间,我可以访问Sample.h中定义的DataType,而不包括它吗?
namespace Testing
{
Type test;
}
问题出现了,因为我有实现这个的文件,似乎没有问题。 另一个用户正在尝试构建,但报告他必须在Sample2.h中#include“Sample.h”才能构建。
答案 0 :(得分:1)
大多数当前编译器不支持前向枚举声明。这是即将推出的C ++ 0x的计划功能。您可以创建指向可能的指针,但无法实例化,这也与其他类型(结构和类)兼容。
噢,我的坏,我猜错了。无论如何,阅读其他人并阅读此内容。标题不是独立编译的。因此,如果您没有在标题中包含必需的标题并将其包含在cpp文件中,则不会遇到任何错误。只要所有cpp文件都包含具有所需顺序的标题,就不会有任何问题。但是,这不是一个好主意,最好在标题中包含任何必要的文件,并使用标题保护来确保它们不会被添加两次。我希望这是有道理的。
答案 1 :(得分:1)
最有可能构建文件,因为一些早期的包含文件包含Sample.h。当省略早期的include文件(或在Sample2.h之后移动)时,文件将不再编译。
答案 2 :(得分:0)
是的,您需要在Sample2.h中包含Sample.h。 Sample {0}中的编译器看不到Type
的定义,因为命名空间名称在2个文件中是相同的。
通过在2个文件中使用相同的命名空间名称,您唯一获得的是Type
不需要在Sample2.h中明确声明其命名空间。例如,如果2个名称空间不相同:
Sample.h
namespace Testing
{
enum Type
{
DATA = 0,
MORE_DATA
};
}
Sample2.h
#include "Sample.h"
namespace Testing1
{
Testing::Type test;
}