Singletonklasse will nicht so wie ich will
-
Hallo, ich bin gerade dabei in das SDL Kalista Spiel Text zu versuchen einzubinden.
Dazu gebe ich euch hier erstmal den Inhalt meiner eigenen Font.h:#ifndef FONT_HPP #define FONT_HPP #include <SDL/SDL_ttf.h> #include "singleton.hpp" #include "Game.hpp" #define g_pFont CFont::Get () class CFont : public TSingleton<CFont> { public: CFont (); ~CFont (); //void Update (); void RenderText(const char *text, SDL_Rect *Rect); private: TTF_Font *font; SDL_Surface *text_surface; CSprite *m_pSprite; }; #endifWie man sieht, ist die Klasse als Singletonklasse definiert (was ja auch Sinn macht). Wenn ich nun versuche in der Hauptschleife des Spiels auf RenderText zuzugreifen spuckt der Compiler den fehler aus, dass g_pFont nicht bekannt ist. Hier die betreffenden Zeilen aus der Game.cpp
g_pFont->RenderText("Test", m_High); g_pFont->RenderText("12", m_Score);Mache ich da was falsch oder warum funzt das nicht?
-
Stammt TSingleton von dir (dann poste bitte den Code) oder gibt es diese Klasse bereits (dann poste doch bitte, welches Framework du dafür verwendest)?
MfG SideWinder
-
Kann die Basis einer Klasse ein Template sein welches zur vollständigen Instantiierung die Definition der Klasse selbst benötigt? (Die Frage ist allgemein gehalten, keine Kritik an dem Code)
Zum eigentlichen Problem wäre es zuallererst mal schön wenn du "funzt nicht" mal definieren könntest!

-
Er hat ja geschrieben, dass g_pFont nicht bekannt sei. Das deutet ja eigentlich nur auf ein fehlendes include hin.
Ich würde solche defines aber eher vermeiden.
-
SideWinder schrieb:
Stammt TSingleton von dir (dann poste bitte den Code) oder gibt es diese Klasse bereits (dann poste doch bitte, welches Framework du dafür verwendest)?
MfG SideWinderDie Klasse TSingleton stammt nicht von mir und wird auch schon mit anderen Klassen (z.B. Framework) erfolgreich verwendet.
LordJaxom schrieb:
Kann die Basis einer Klasse ein Template sein welches zur vollständigen Instantiierung die Definition der Klasse selbst benötigt? (Die Frage ist allgemein gehalten, keine Kritik an dem Code)
Zum eigentlichen Problem wäre es zuallererst mal schön wenn du "funzt nicht" mal definieren könntest!

Ich habe doch bereits geschrieben, dass der Compiler mir sagt, dass es g_pFont nicht gibt, obwohl g_pFont sozusagen ein Singleton der Klasse CFont ist. Daher müsste normalerweise g_pFont vom Compiler korrekt erkannt werden.
-
Nunja die genaue Compilermeldung lässt oft noch zusätzliche Schlüsse zu

Zu meiner eigenen Frage: Ja, geht, wenn in der Templateklasse ein Forward der Ableitung existiert (was ja implizit durch den Templateparameter der Fall ist). Man lernt nie aus

-
Die genau Compilermeldung ist:
Game.cpp: In member function `void CGame::Run()': Game.cpp:136: error: `g_pFont' undeclared (first use this function) Game.cpp:136: error: (Each undeclared identifier is reported only once for each function it appears in.) make.exe: *** [Game.o] Error 1 Ausführung beendetJetzt weisst du genau so viel wie vorher oder?? :p
-
Ich kann aber Braunsteins Vermutung konkretisieren bzw. bestätigen dass wohl die Definition von g_pFont selbst fehlt. Was eigentlich nur heissen kann, dass dem Compiler zu dem Zeitpunkt des Auftauchens das #define nicht bekannt ist

Includest Du die font.h direkt ins Hauptprogramm wo Du das Teil benutzt?
-
Naja zumindest kann mann jetzt sagen dass du font.hpp nicht in Game.cpp eingebunden hast was Braunstein übrigens schon längst gesagt hat.
Kurt
-
Ich wusste das ich was vergessen habe
Sorry und thx jetzt gehts ^^