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