Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Linkingfehler bei Singleton.....

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.01.2006, 14:34 Uhr
~newGuest
Gast


Hallo,

ich habe eine Klasse, die ich mit dem Singletonpattern bauen will.

Die Klasse heißt Initializer, hat zwei Vaterklassen und hat eine statische Membervariable vom Typ Initializer *.

private:
static Initializer * instance;

Außerdem hat die Klasse eine statische getInstance()-Methode, die nach dem Singletonprinzip läuft:

public:
static Initializer * getInstance();

Implementierung:
************

Initializer * Initializer::getInstance(){
if (Initializer::instance == NULL){
Initializer::instance = new Initializer();
}

return Initializer::instance;
}

*************************************************************
Die Sache kompiliert, aber beim Linken bekomme ich folgende Meldung:

Initializer.obj : error LNK2001: unresolved external symbol "private: static class Initializer * Initializer::instance" (?instance@Initializer@@0PAV1@A)
X86Dbg/VisuCenter.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Creating browse info file...
*************************************************************
Der Aufruf mit dem new macht irgendwie probleme....Woran liegt das??...etwa an der Mehrfachvererbung??...Hat jemand ne Ahnung?....DANKE
**************************************************************
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.01.2006, 15:04 Uhr
Tommix



Hallo,
Du hast instance deklariert, aber nicht definiert. Also noch ein

C++:
Initializer* Initializer::instance;


in die Implementierung!

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.01.2006, 19:19 Uhr
0xdeadbeef
Gott
(Operator)


Besser gleich

C++:
class Initializer {
public:
  static Initializer &instance();
};

Initializer Initializer::instance() {
  static Initializer me;
  return me;
}


Damit sparste dir die Pointervergleiche und musst am Ende nicht von Hand deleten.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: