以下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);

最佳答案

struct a ::b;没有声明类型为b的名为a的变量,如果这就是您要的。这是嵌套类型a::b的(冗余)前向声明。在C++程序中,空格通常并不重要。因此,您的程序声明但从未定义名为b的变量。这违反了“一个定义规则”:因此,程序格式错误,链接器会告诉您很多信息。

关于单个限定名称和两个连续名称之间的C++ 11模糊性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17957838/

10-11 23:17
查看更多