单个限定名称和两个连续的C ++ 11歧义?

时间:2013-07-30 21:33:34

标签: c++ c++11

以下C ++ 11程序是否格式不正确?

struct a
{
    struct b {  };

    void f() {};
};

extern struct a b;

struct a ::b;

int main()
{
    b.f();
}

为什么/为什么不呢?

感兴趣的是这一行:

struct a ::b;

这是内部类a::b的前向声明吗?

或者这是全局变量b的定义?相当于:

struct a (::b);

1 个答案:

答案 0 :(得分:1)

struct a ::b;未声明类型为b的名为a的变量,如果这就是您所要求的。它是嵌套类型a::b的(冗余)前向声明。在C ++程序中,空格通常不重要。因此,您的程序声明但从未定义名为b的变量。这违反了一个定义规则:程序因此格式不正确,链接器会告诉你。