Из стандартных документов Сек. 9.8.1 ,
Класс может быть объявлен в определении функции; такой класс называется локальным классом. Название локального класса является локальным
в его объем. Локальный класс находится в области видимости, и имеет такой же доступ к именам за пределами
функция, как и вмещающая функция. Объявления в локальном классе могут использовать только имена типов, статические переменные,
внешние переменные и функции, а также перечислители из прилагаемой области видимости.
Пример из самого стандартного документа,
int x;
void f()
{
static int s ;
int x;
extern int g();
struct local {
int g() { return x; } // error: x is auto
int h() { return s; } // OK
int k() { return ::x; } // OK
int l() { return g(); } // OK
};
// ...
}
Следовательно, доступ к автоматической переменной внутри локального класса невозможен. Либо сделайте локальное значение static
, либо глобальным, в зависимости от того, подходит для вашего дизайна.