2013-04-29 21 views
40

Ciao io sto ottenendo errore di riferimento definito nel seguente codice:undefined reference to C++ variabile statica

class Helloworld{ 
    public: 
    static int x; 
    void foo(); 
}; 
void Helloworld::foo(){ 
    Helloworld::x = 10; 
}; 

Non voglio una funzione staticfoo(). Come posso accedere alla variabile static di una classe nel metodo non static di una classe?

+4

Sarebbe bene accettare una risposta. – Geoff

risposta

62

Non voglio una funzione staticfoo()

Beh, foo() è non statica nella classe, e si fanno non necessità di renderlo static per accedere static variabili della tua classe.

Quello che dovete fare è semplicemente quello di fornire una definizioneper la variabile membro static:

class Helloworld { 
    public: 
    static int x; 
    void foo(); 
}; 

int Helloworld::x = 0; // Or whatever is the most appropriate value 
         // for initializing x. Notice, that the 
         // initializer is not required: if absent, 
         // x will be zero-initialized. 

void Helloworld::foo() { 
    Helloworld::x = 10; 
}; 
+1

grazie mille amico. Stavo creando un'istanza di HelloWorld :: x ma non di int. Ancora una volta grazie. –

+0

@Nevermore: prego, felice che ci sia stato d'aiuto;) –

+0

@AndyProwl Ho provato questo errore e ho ottenuto un errore del compilatore sulla riga che imposta x su 0. Dice 'foo' nella 'classe Helloworld' non specifica un tipo. Qualche consiglio? – ufmike

38

Il codice è corretto, ma incompleta. La classe Helloworld ha una dichiarazione del suo membro dati statici x, ma non esiste una definizione di tale membro dati. Somehwere nel codice sorgente è necessario

int Helloworld::x; 

o, se 0 non è un valore iniziale del caso, aggiungere un inizializzatore.

Problemi correlati