转发声明类我非常惊讶地得知,我无法向前从另一个范围使用范围解析运算符声明一个类,即在命名空间
class someScope::someClass;
相反,完整的声明已被用作如下:
namespace
{
class someClass;
}
有人可以解释为什么会出现这种情况吗?
更新:澄清,我要求为什么这是这种情况。
转发声明类我非常惊讶地得知,我无法向前从另一个范围使用范围解析运算符声明一个类,即在命名空间
class someScope::someClass;
相反,完整的声明已被用作如下:
namespace
{
class someClass;
}
有人可以解释为什么会出现这种情况吗?
更新:澄清,我要求为什么这是这种情况。
好像答案就在C++规格:标准
3.3.5 “命名空间内”。名称空间中的体 声明
实体被说成是 命名空间的成员,并且通过引入 名称这些声明到命名空间 的 声明性区域被认为是 命名空间的成员名称。
命名空间构件还可以是 应用于 其命名空间的名称或它的名称提名 构件的名字空间在 using-一个命名空间的 (5.1)的范围::分辨率 操作之后称为指示;
我不知道为什么。也许是因为在你的第一个代码片段中,someScope
是未声明的。它可以是名称空间或类名。如果someScope是一个类名,你不能独立地转发声明另一个类的类成员。
Duplicate:http://stackoverflow.com/questions/1368642/is-there-a-shorter-way-to-forward-declare-a-class-in-a-namespace技术答案,从这个问题:http://stackoverflow.com/questions/1368642/is-there-a-shorter-way-to-forward-declare-a-class-in-a-namespace/1368738#1368738 – GManNickG 2010-07-19 09:26:05