C ++类声明中的限定名称

时间:2015-04-24 22:56:00

标签: c++ visual-c++ struct msvc12

根据this page,类名可以是“可选的限定”。因此,我希望编译以下代码:

struct ::globalSt {};

在MSVC 2013u4中,我收到错误:

  

错误1错误C2039:'globalSt':不是'`global namespace''的成员

我是误解了引用还是MSVC错误?

2 个答案:

答案 0 :(得分:4)

如果您使用限定名称定义类,则必须先声明该名称。 [类] / 11

  

如果 class-head-name 包含嵌套名称说明符 class-specifier 应引用一个类   先前直接在嵌套名称说明符引用的类或命名空间中声明,或者在   该命名空间的内联命名空间集(7.3.1)的元素(即,不仅仅是由...继承或引入    using-declaration ), class-specifier 应出现在封闭前一个声明的命名空间中。   在这种情况下,定义的 class-head-name 嵌套名称说明符不应以    decltype说明符

答案 1 :(得分:1)

为了使这个工作,这个班必须已经被开除了。如果在定义之前在代码中的某处放置了struct globalst;,它将正常工作。

例如,如果你这样做

struct MyStruct;

然后做

struct ::MyStruct {};

它应该编译。

使用MSVC 2013测试。