Первое объявление
char &ns::x = y;
предполагает, что имя x
уже объявлено в пространстве имен ns
.Однако это предположение неверно (в предоставленном фрагменте кода нет предыдущего объявления переменной. Возможно, фрагмент кода не завершен.).
Фрагмент кода может работать при условии, что переменная x уже объявлена (без определения) в пространстве имен ns.
Например,
#include <iostream>
namespace ns
{
extern char &x;
}
char y;
char & ns::x = y;
int main() {
return 0;
}
В этом фрагменте кода
namespace ns {
char &x = y;
}
определена ссылка, которая инициализируется объектомy
.