2011-12-28 16 views
9
class TConst 
{ 
    const int i; 
    int& ref; 
    public: 
    TConst(int n):i(n),ref(n){} 
    static void p1(){prn(i);}//error here 
}; 

Il mio compilatore genera un errore quando tento di utilizzare un membro della classe const in una funzione membro static.Perché non possiamo utilizzare i membri const in funzioni membro statiche?

Perché non è consentito?

+1

Si prega di inviare sempre l'errore completo che si ottiene. – orlp

+1

const è ancora legato a un oggetto, non alla classe. – nullpotent

+1

In un metodo statico non esiste un'istanza di classe quindi non ci sono membri di classe ... Per tua comodità puoi renderlo 'static const int i = 42;' se vuoi usarlo in questo modo. – AJG85

risposta

6

Il membro const viene inizializzato durante la costruzione dell'oggetto. I membri static non dipendono dalla creazione dell'oggetto e non hanno accesso al puntatore this, quindi non sanno dove risiede la variabile membro const.

7

che non avrebbe funzionato, anche se non era const:

error: a nonstatic member reference must be relative to a specific object 

funzioni statiche non possono accedere alle variabili membro non statici. Questo perché le variabili membro non statiche devono appartenere a un oggetto classe e le funzioni membro statiche non hanno oggetti di classe con cui lavorare.

13

const significa cose diverse. In questo caso, significa che i è immutabile dopo essere stato inizializzato. È non corrisponde a significa che è una costante letterale (come credo che tu pensi che significhi). i può essere diverso per le diverse istanze di TConst, quindi è logico che i metodi static non possano utilizzarlo.

+0

È sempre così semplice) Grazie – Alexander

Problemi correlati