2013-01-15 30 views
15

Eventuali duplicati:
C++: undefined reference to static class memberindefinito riferimento alla variabile statica

sto usando MinGW. Perché variabile statica non funziona

[Linker error] undefined reference to `A::i' 

#include <windows.h> 

    class A { 
     public:  
     static int i; 
     static int init(){ 

      i = 1; 

     } 

    }; 

int WINAPI WinMain (HINSTANCE hThisInstance, 
        HINSTANCE hPrevInstance, 
        LPSTR lpszArgument, 
        int nFunsterStil){ 
    A::i = 0; 
    A::init(); 

    return 0; 
} 
+1

si dovrebbe cambiare ritorno del 'init' di annullare, o restituire qualcosa –

+2

Questa domanda è stato chiesto innumerevoli volte: http://stackoverflow.com/questions/272900/c -undefined-reference-to-static-class-member http://stackoverflow.com/questions/12117859/c-undefined-reference-to-static-variable http://stackoverflow.com/questions/3672088/undefined-reference -error-to-use-of-static-variables http://stackoverflow.com/questions/7787059/g-undefined-reference-static-member-variable e molti altri –

risposta

33

Hai solo dichiarato A::i, occorre definire A::i prima di utilizzarlo.

class A 
{ 
public:  
    static int i; 
    static void init(){ 
    i = 1; 
    } 
}; 

int A::i = 0; 

int WINAPI WinMain (HINSTANCE hThisInstance, 
       HINSTANCE hPrevInstance, 
       LPSTR lpszArgument, 
       int nFunsterStil) 
{ 
    A::i = 0; 
    A::init(); 

    return 0; 
} 

Anche la funzione init() deve restituire un valore o impostare su nullo.

+0

Cosa succede se è privato? Puoi ancora accedervi per definirlo? – Goodies

8

Hai dichiarato A::i all'interno della classe, ma non lo hai definito. È necessario aggiungere una definizione dopo class A

class A { 
public: 
    static int i; 
    ... 
}; 

int A::i; 
Problemi correlati