Da documenti standard di Sec 9.8.1,
Una classe può essere dichiarata all'interno di una definizione di funzione; tale classe è chiamata classe locale. Il nome di una classe locale è locale nel suo ambito di chiusura. La classe locale rientra nell'ambito di applicazione dell'ambito di inclusione e ha lo stesso accesso ai nomi al di fuori di la funzione come la funzione di inclusione. Le dichiarazioni in una classe locale possono utilizzare solo nomi di tipo, variabili statiche, variabili e funzioni extern e gli enumeratori dall'ambito di inclusione.
Un esempio dai documenti stesso standard,
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
};
// ...
}
Quindi accedere una variabile auto all'interno di una classe locale non è possibile. O fai il tuo valore locale come static
o uno globale, a seconda di quale sia il appropriato per il tuo progetto.
Il tipo di ritorno di 'main()' deve essere sempre 'int'. –