2009-07-14 2 views
1

Mögliche Duplizieren:
Undefined reference - C++ linker errorundefiniert Referenzfehlermeldung - C++

Jetzt bin ich eine „nicht definiert Referenzfehlermeldung zu erhalten, um 'GlobalClass :: s_instance' und‚GlobalClass :: Beispiel()‘bzw. auf diese Aussagen:

GlobalClass *GlobalClass::s_instance = 0; 

GlobalClass::instance()->set_value(myAddress); \\ <== undefined reference  
std::cout << "====>address is is " << GlobalClass::instance()->get_value() 

Irgendwelche Ideen ist der Code unten gezeigt:

=================================================

#ifndef GLOBALCLASS_H_ 
#define GLOBALCLASS_H_ 

#include <string> 
class GlobalClass { 

public: 

    std::string get_value(); 

    void set_value(std::string); 

    static GlobalClass *instance(); 

    static GlobalClass *s_instance; 

private: 

    std::string m_value; 
}; 

#endif /* GLOBALCLASS_H_ */ 

=========================================== ====

#include <string> 
#include "GlobalClass.h" 



/* 
GlobalClass(int v = 0) 
{ 
m_value = v; 
} 
*/ 

    static GlobalClass *s_instance; 

    std::string GlobalClass::get_value() 
    { 
     return m_value; 
    } 

    void GlobalClass::set_value(std::string v) 
    { 
     m_value = v; 
    } 

    static GlobalClass *instance() { 
     if (!s_instance) 
       s_instance = new GlobalClass; 
     return s_instance; 
    } 

======================================= ====================

#include <iostream> 
#include "GlobalClass.h" 

using namespace std; 

int main() { 

    GlobalClass::s_instance = 0; \\ <== undefined reference 


    std::string myAddress = "abc"; 
    GlobalClass::instance()->set_value(myAddress); \\ <== undefined reference 

    std::cout << "====>address is is " << GlobalClass::instance()->get_value() 
    \\ <== undefined reference 

       << std::endl; 
    return 0; 

}

+0

Genaues Duplikat: http://StackOverflow.com/Questions/1122938/undefined-reference-c-Linker-Fehler –

+0

Ich weiß, das ist ein anderer Fehler, aber es ist das gleiche Problem wie Ihre andere Frage, also bin ich dort eine Antwort schreiben und abstimmen, um diese zu schließen. –

+1

Ok, kein Problem. Ich war mir nicht sicher, was ich damit anfangen sollte. –

Antwort

2

Weiter zu Alex Blacks Antwort, beschwert sich, dass die Funktion GlobalClass :: instance() keine Implementierung hat. Welche dies nicht der Fall:

static GlobalClass *instance() { 
     if (!s_instance) 
       s_instance = new GlobalClass; 
     return s_instance; 
    } 

das wirklich sein sollte:

GlobalClass *GlobalClass::instance() { 
      if (!s_instance) 
        s_instance = new GlobalClass; 
      return s_instance; 
     } 

Vergessen Sie nicht, dass, obwohl es statisch ist es immer noch eine Member-Funktion ist!

+0

Das war es wahrscheinlich. Meine Güte! –

2

In Ihrer CPP-Datei, m ove "Global :: s_instance = 0;" außerhalb von main(), und setzen Sie ihn mit statischem, z.