Ich versuche die Bedeutung des Fehlers zu verstehen, den ich bekomme.Singleton-Verbindungsfehler
dies ist eine Singleton Implementierung:
class Singleton
{
private:
Singleton():m_value(0){};
static Singleton * m_instance;
int m_value;
public:
static Singleton * GetInstance()
{
if(!m_instance)
{
m_instance = new Singleton;
}
return m_instance;
}
void SetValue(int x){m_value = x;}
int GetValue(){return m_value;}
~Singleton()
{
if(m_instance)
delete m_instance;
}
};
Singleton* Singleton::m_instance = 0;
void main()
{
Singleton * s1 = Singleton::GetInstance();
}
Die Code colpiles und laufen sucessfuly.
Wenn ich die Linie Singleton* Singleton::m_instance = 0;
entfernen, erhalte ich die Fehlermeldung:
error LNK2001: unresolved external symbol "private: static class Singleton * Singleton::m_instance"
Ich denke, die Bedeutung dieser Linie ist die statische Variable m_instance
auf 0
So setzen nicht, daß ich die Syntax verstehen von dieser Linie - warum kann ich nicht nur Singleton::m_instance = 0;
schreiben? und warum bekomme ich Linkfehler beim Entfernen dieser Zeile?
Der bessere idiomatische Weg: http://stackoverflow.com/questions/1008019/c-singleton-design-pattern –