在库中,我正在使用某些变量声明如下:
char &ns::x = y;
但是,如果我这样做,则会收到以下错误:error: no member named 'x' in namespace 'ns'
如果我重写它,它将起作用:
namespace ns {
char &x = y;
}
到底有什么区别?为何在图书馆内工作?
第一个声明
char &ns::x = y;
假定名称x
已在名称空间ns
中声明。但是这个假设是错误的。
在此代码段中
namespace ns {
char &x = y;
}
定义了由对象y
初始化的引用。
如果您是对的,并且库中的代码与编写的代码完全相同,则表明该库中的其他位置,您会找到以下声明:
namespace ns {
extern char& x;
}
换句话说,x
必须已经在ns
内已声明(并且未定义!)。