单个合格名称和两个连续的C 11之间的歧义?

前端之家收集整理的这篇文章主要介绍了单个合格名称和两个连续的C 11之间的歧义?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下C11程序是否形成错误
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);

解决方法

struct a :: b;没有声明一个名为b的类型为a的变量,如果这是您要求的.这是嵌套类型a :: b的(冗余)前向声明.空白在C程序中通常并不重要.所以你的程序声明,但从来没有定义一个名为b的变量.这违反了一个定义规则:程序因此是不正确的,链接器会告诉你一样多.

猜你在找的C&C++相关文章