以下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/