2013-01-15 10 views
15

Powiel możliwe:
C++: undefined reference to static class memberNiezdefiniowany odniesienia do zmiennej statycznej

Używam MinGW. Dlaczego zmienna statyczna nie działa

[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

należy zmienić zwrot 'init' do unieważnienia lub coś –

+2

powrócić To pytanie został poproszony wiele razy wcześniej: http://stackoverflow.com/questions/272900/c -odniesiony-odniesienie-do-statycznej-klasy-członka http://stackoverflow.com/questions/12117859/c-undefined-reference-to-static-variable http://stackoverflow.com/questions/3672088/undefined-reference -zabezpieczające-używać-z-statycznych-zmiennych http://stackoverflow.com/questions/7787059/g-undefined-reference-static-member-variable i wiele więcej –

Odpowiedz

33

Państwo tylko uznane A::i, należy zdefiniować A::i przed użyciem.

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; 
} 

Również twoja funkcja init() powinna zwrócić wartość lub ustawić ją jako nieważną.

+0

Co jeśli jest prywatne? Czy nadal możesz uzyskać do niego dostęp, aby go zdefiniować? – Goodies

8

Użytkownik zadeklarował w swojej klasie A::i, ale go nie zdefiniował. Należy dodać definicję po class A

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

int A::i; 
Powiązane problemy