2

根据这个页面,类名可以是“可选的”。因此,我希望以下代码能够编译:

struct ::globalSt {};

在 MSVC 2013u4 中,出现错误:

错误 1 ​​错误 C2039:“globalSt”:不是“全局命名空间”的成员

我是误解了参考还是 MSVC 错误?

4

2 回答 2

4

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

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

于 2015-04-24T23:06:03.400 回答
1

为此,该类必须已经被删除。如果您struct globalst;在定义之前在代码中放置一个位置,它将正常工作。

例如,如果你这样做

struct MyStruct;

然后做

struct ::MyStruct {};

它应该编译。

使用 MSVC 2013 测试。

于 2015-04-24T23:05:37.257 回答