Cannot convert 'Bla* (*)()' to 'Bla*'
-
Ich versuche gerade ein Programm zu schreiben was eine nur einmal existierende Klasse mittels einer statischen Funktion aufrufen kann. Dabei bekomme ich den Fehler der ganz unten nochmal steht, aber ich kann mit ihm überhaupt nix anfangen. Weiß jemand eine Lösung? Hab ich vielleicht nicht den richtigen Ansatz?
Header:
class Bla { public: Bla(); ~Bla(); static Bla getSingleton(void); static Bla* getSingletonPtr(void); private: static Bla* SingletonPtr; };.cpp
Bla Bla::getSingleton() { return *(Bla::SingletonPtr); } Bla* Bla::getSingletonPtr() { return Bla::SingletonPtr; }Funktion die das ganze aufruft:
void GiveMeSingleton() { Bla* Prt= Bla::getSingletonPtr; }error: cannot convert 'Game* (*)()' to 'Game*' in initialization
-
Du hast die Klammern beim Funktionsaufruf vergessen.
-
Manchmal zweifel ich echt an meiner Intelligenz ...
Das hat jetzt zumindest diesen Fehler gelöst, doch leider bekomme ich jetzt undefined references:undefined reference to `Bla::SingletonPtr'
-
Da fehlt noch die Definition von Bla::SingletonPtr in der cpp. Das ist bei statischen Membervariablen notwendig.
-
Bla Bla::getSingleton() { return *(Bla::SingletonPtr); }Das ist Unfug.
Ein Singleton kann man nie "by value" zurückgeben, da es dabei ja kopiert wird, und dadurch kein Singleton mehr ist.
-
Wenn du die dereferenzierte Form der Instanz haben willst, kannst du das über Referenzen lösen:
Bla& Bla::getSingleton(void) { return *SingletonPtr; }Das
Bla::für die Klassenzugehörigkeit musst du bei Memberfunktionen sowieso nicht mehr angeben.