【发布时间】:2011-03-17 19:48:11
【问题描述】:
我很惊讶地发现我无法使用范围解析运算符从另一个范围内转发声明一个类,即
class someScope::someClass;
相反,必须按如下方式使用完整声明:
namespace
{
class someClass;
}
有人能解释一下为什么会这样吗?
更新:为了澄清,我问为什么会出现这种情况。
【问题讨论】:
标签: c++ scope namespaces declaration
我很惊讶地发现我无法使用范围解析运算符从另一个范围内转发声明一个类,即
class someScope::someClass;
相反,必须按如下方式使用完整声明:
namespace
{
class someClass;
}
有人能解释一下为什么会这样吗?
更新:为了澄清,我问为什么会出现这种情况。
【问题讨论】:
标签: c++ scope namespaces declaration
您不能在其命名空间之外声明一个类,因为编译器无法识别 someScope 的类型。
namespace{ } 需要声明命名空间的存在,然后,将 class someClass 声明到您的作用域中。
【讨论】:
似乎答案就在 C++ 规范中:
3.3.5 标准中的“命名空间范围”。
在命名空间主体中声明的实体 据说是成员 命名空间,以及由 这些声明进入 命名空间的声明区域 据说是 命名空间。
命名空间成员也可以是 在 :: 范围之后引用 分辨率运算符(5.1)应用于 其命名空间的名称或名称 命名空间的名称 成员的命名空间在 使用指令;
【讨论】:
我不知道为什么。可能是因为,在您的第一个代码 sn-p 中,someScope 未声明。它可以是命名空间,也可以是类名。如果 someScope 是类名,则不能独立转发声明另一个类的类成员。
【讨论】: