Probleme Singleton
-
Ich habe eine klassische Singletonklasse in Form eines "LogContainers" den ich in etwa so deklariert habe
class LogContainer { private: LogContainer(); public: static LogContainer & getInstance(); };Problem an der Sache wenn ich nun außerhalb auf die Instanz der Klasse, in der Form
LogContainer::getInstance.tueirgendwas(para1,para2);zugreifen möcte beschwert sich mein Compiler mit der Fehlermeldung:
error C2556: 'int __thiscall LogContainer::getInstance(void)' : overloaded function differs only by return type from 'class LogContainer &__cdecl LogContainer::getInstance(void)'Steh atm grad ma wieder aufm Schlauch und eventuell habt ihr ja ne Idee woran das liegt
mfg
Brok3r
-
Hast du mehrere getInstance()-Funktionen?
gruss
v R
-
nope nur 1 einzige

EDIT:
die folgende Zeile auf die oben gepostete Fehlermeldung'int (void)' differs in levels of indirection from 'class LogContainer &(void)'
-
LogContainer::getInstance.tueirgendwas(para1,para2);sollte wahrscheinlich
LogContainer::getInstance[b]()[/b].tueirgendwas(para1,para2);sein.
Kurt
-
Wie schaut der Aufruf genau aus?
-
Erstmal hast du dort beim Aufruf die Klammern vergessen. Und zweitens: Zeig doch mal die Definition (Funktionsrumpf) der getInstance()-Funktion.
-
ZuK schrieb:
LogContainer::getInstance.tueirgendwas(para1,para2);sollte wahrscheinlich
LogContainer::getInstance[b]()[/b].tueirgendwas(para1,para2);sein.
KurtHmmm...ja das wollt ich gar nicht anmerken, denn er schrieb "in der Form" und
da bin ich schon davon ausgegangen, dass er das so gemacht hat
Aber gut, das waere eine Fehlerquelle, wenn ich auch denken wuerde, er wuerde
hier einen anderen Fehler generieren.gruss
v R
-
virtuell Realisticer schrieb:
Aber gut, das waere eine Fehlerquelle, wenn ich auch denken wuerde, er wuerde
hier einen anderen Fehler generieren.Ja, denn diese Fehlermeldung sagt deutlich, dass eine "int getInstance()" und eine "LogContainer& getInstance()" sich nur durch den Return-Typ unterscheiden, was voraussetzt, dass es eine "int getInstance()" gibt (und wenn auch nur durch einen blöden Vertipper)

-
die Klammern waren nur ein Tippfehler

LogContainer::getInstance().tueirgendwas(para1,para2);um alle (Un)Klarheiten zu beseitigen

static LogContainer theInstance; return theInstance;ist der Funktionsrumpf
-
Brok3r schrieb:
static LogContainer theInstance; return theInstance;ist der Funktionsrumpf
Ja, es heißt zwar immer, man sollte das Problem auf ein Minimum reduzieren - aber man kann's damit auch überteiben

(die Fehlermeldung aus dem Eingangspost deutet darauf hin, daß du bei der Definition vergessen hast, den Rückgabetyp anzugeben - es ist zwar illegal unter C++, aber manche Compiler schlucken sowas noch aus Kompatibilitätsgründen)
-
Leider habe ich den Rückgabetyp richtig angegeben
LogContainer & LogContainer::getInstance() { //operation getInstance() static LogContainer theInstance; return theInstance; }LordJaxom schrieb:
virtuell Realisticer schrieb:
Aber gut, das waere eine Fehlerquelle, wenn ich auch denken wuerde, er wuerde
hier einen anderen Fehler generieren.Ja, denn diese Fehlermeldung sagt deutlich, dass eine "int getInstance()" und eine "LogContainer& getInstance()" sich nur durch den Return-Typ unterscheiden, was voraussetzt, dass es eine "int getInstance()" gibt (und wenn auch nur durch einen blöden Vertipper)

es gibt aber nur eine getInstance() Methode und diese liefert den oben beschriebenen Rückgabetyp
-
Brok3r schrieb:
es gibt aber nur eine getInstance() Methode und diese liefert den oben beschriebenen Rückgabetyp
Das passt aber nicht zur Fehlermeldung. Die sagt, du hättest auch eine getInstance-Methode, die int zurückgibt und nicht static ist.
Zeig bitte ein vollständiges Minimalbeispiel, das den Fehler reproduziert.