2013-01-15 23 views
15

Mögliche Duplizieren:
C++: undefined reference to static class memberundefiniert Bezug auf statische Variable

ich MinGW bin mit. Warum statische Variable nicht

Arbeits
[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

fügen Sie sollten Rückkehr von 'init' ändern ungültig zu erklären oder Rückkehr etwas –

+2

Diese Frage unzählige Male zuvor gestellt wurde: 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-wegen-Verwendung-von-statischen Variablen http://stackoverflow.com/questions/7787059/g-undefined-reference-static-member-variable und viele mehr –

Antwort

33

Sie erklärte nur A::i, müssen definieren A::i bevor Sie es.

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

Auch Ihre init() -Funktion sollte einen Wert zurückgeben oder auf void setzen.

+0

Was ist, wenn es privat ist? Kannst du noch darauf zugreifen, um es zu definieren? – Goodies

8

Sie haben in Ihrer Klasse A::i deklariert, aber Sie haben es nicht definiert. Sie müssen eine Definition nach class A

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

int A::i; 
Verwandte Themen