Von Standard docs Sec 9.8.1,
Eine Klasse kann innerhalb einer Funktionsdefinition deklariert werden; Eine solche Klasse wird als lokale Klasse bezeichnet. Der Name einer lokalen Klasse ist lokal zu seinem umschließenden Bereich. Die lokale Klasse ist im Geltungsbereich des umschließenden Bereichs und hat den gleichen Zugriff auf Namen außerhalb der Funktion wie die umschließende Funktion. Deklarationen in einer lokalen Klasse können nur Typnamen, statische Variablen, externe Variablen und Funktionen und Enumeratoren aus dem umschließenden Bereich verwenden.
Ein Beispiel aus dem Standard-Dokumente selbst,
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
};
// ...
}
somit eine automatische Variable innerhalb einer lokalen Klassen-Zugriff nicht möglich ist. Machen Sie entweder Ihren lokalen Wert als static
oder einen globalen Wert, der für Ihr Design passend aussieht.
Der Rückgabetyp von 'main()' muss immer 'int' sein. –