2010-10-14 12 views
5
void foobar(){ 
    int local; 
    static int value; 
    class access{ 
      void foo(){ 
       local = 5; /* <-- Error here */ 
       value = 10; 
      } 
    }bar;  
} 
void main(){ 
    foobar(); 
} 

Perché non accede a local all'interno di foo() compilare? OTOH Posso accedere facilmente e modificare la variabile statica value.Problema di accesso nella classe locale

+4

Il tipo di ritorno di 'main()' deve essere sempre 'int'. –

risposta

1

All'interno di una classe locale non è possibile utilizzare/accedere alle variabili automatiche dall'ambito di inclusione. È possibile utilizzare solo variabili statiche, variabili esterne, tipi, enumerazioni e funzioni dall'ambito di inclusione.

0

Fai local statica e quindi si dovrebbe essere in grado di accedervi

1

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.

0

Probabilmente perché è possibile dichiarare l'oggetto che vive al di fuori dell'ambito della funzione.

foobar() called // local variable created; 
Access* a = new Access(); // save to external variable through interface 
foobar() finished // local variable destroyed 

... 


savedA->foo(); // what local variable should it modify? 
Problemi correlati