Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 01.05.2006, 14:22 Titel: Singleton / Klasse public machen |
|
|
Ich stehe vor folgendem Problem.
Meine Arbeitsmappe besteht aus 2 Projekten:
Projekt 1 = Hauptteil:
Hier gibt es die Klasse TextureManager, die als Singleton deklariert ist.
Projekt 2 = DXRenderer
hier gibt es die Klasse DX9TexturManager, die public zu der Klasse Texture Manager sein soll. Also so:
CPP: | class CEDLL DX9TextureManager : public TextureManager
...
|
ich bekomme aber in dem Projekt 2 immer nicht aufgelöste Verweise auf die TextureManager Klasse, hab aber keinen Plan wieso.
Wenn ich das richtig interpretiert habe, nutzt die Ogre-Engine z.b. gleiche vorgehensweise...
Hat jemand eine Idee wie ich das anstellen könnte?
Danke im voraus _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 01.05.2006, 14:28 Titel: |
|
|
Blöde Frage, hast du denn, wenn du 2 getrennte Projekte bearbeitest, die Dateien aus dem 1. Projekt richtig in das 2. gelinkt bzw. übernommen? Oder wie kann ich mir das vorstellen? Ich bin mir grade nicht sicher, ob ich dich so richtig verstehe, wie du es meinst. |
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 01.05.2006, 14:36 Titel: |
|
|
jaja, die includes sind drin.
Sonst würde ich ja im 2. Projekt auch den Hinweis bekommen, das die Basisklasse nicht deklariert ist _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 01.05.2006, 14:50 Titel: |
|
|
Achso, ich Drops, was für ein Singleton verwendest du denn? Meyer-Singletons mucken in Vererbungshierarchien.
Edit: In diesem GameDev-Artikel wird glaub ich eine Lösung für dein Problem vorgestellt.
http://www.gamedev.net/reference/articles/article1825.asp
Am einfachsten umgehst du dieses Singleton-Vererbungsproblem eigentlich immer, indem du das Singleton direkt in den abgeleiteten Klassen implementierst. Ist zwar imho nicht so schön und elegant, wie die gleich mit zu vererben, erspart dir u.U. aber auch viele Probleme. |
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 01.05.2006, 15:14 Titel: |
|
|
Mir fällt gerade mir erschrecken auf, das das gleiche Problem auftaucht ohne Singleton. Verdammt...
Vielleicht mal mit etwas Code:
Hauptprojekt .h vom TexturManager:
CPP: | namespace CE
{
namespace Core
{
class CEDLL DX9TextureManager;
class CEDLL TextureManager //: public CE::SingletonT<CE::Core::TextureManager>
{
//friend CE::SingletonT<CE::Core::TextureManager>;
public:
TextureManager(void);
virtual ~TextureManager(void);
};
};
};
#include "./DX9/CEDX9TextureManager.h"
|
Renderer-Projekt .h vom DX9TexturManager
CPP: | #include "../CETextureManager.h"
namespace CE
{
namespace Core
{
class CEDLL DX9TextureManager : public TextureManager
{
public:
DX9TextureManager(void);
virtual ~DX9TextureManager(void);
};
};
};
|
Als Fehlermeldung haut er mir das hier raus:
Code: | CE2_DX9Renderer error LNK2019: Nicht aufgelöstes externes Symbol '"public: __thiscall CE::Core::TextureManager::TextureManager(void)" (??0TextureManager@Core@CE@@QAE@XZ)', verwiesen in Funktion '"public: __thiscall CE::Core::DX9TextureManager::DX9TextureManager(void)" (??0DX9TextureManager@Core@CE@@QAE@XZ)'
|
Ich raffs nicht, im Prinzip ist doch da gar nix drin... _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 01.05.2006, 15:20 Titel: |
|
|
Aber den TextureManager-Konstruktor hast du auch irgendwo definiert? |
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 01.05.2006, 15:34 Titel: |
|
|
Ja ja, ne cpp gibts dafür ja auch, auch wenn nicht's dolles drin steht
CPP: | CE::Core::TextureManager::TextureManager(void)
{
MessageBox(0,"TexturManager","Test1",MB_OK);
}
CE::Core::TextureManager::~TextureManager(void)
{
} |
_________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 01.05.2006, 15:50 Titel: |
|
|
Ist das Einbinden des DX9TextureManagers unmittelbar nach der TextureManager-Deklaration und das Einbinden der TextureManager-Header vor der DX9TextureManager-Deklaration beabsichtigt? In dieser Form wäre es eigentlich logisch, dass der Linker Zicken macht. |
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 01.05.2006, 16:06 Titel: |
|
|
Beabsichtigt ist in diesem Stadium gar nichts mehr. Das ist lediglich der letzte Versuch gewesen. Auch wenn ich das include in der TexturManager Klasse nicht am Ende setzte bleibt der Fehler gleich. In der DX9TextureManager Klasse brauche ich ja das include, damit er die Basisklasse kennt.... sehr verwirrend das ganze.
Ich denke auch das an der Konstelation der includes was falsch sein könnte, aber ich weiß nicht was. _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 01.05.2006, 16:26 Titel: |
|
|
Dann kann es doch im Grunde nur noch mit den unterschiedlichen Projekten zusammenhängen? Ich mein, im jetzigen Status sind es doch nur noch 2 leere Klassen, wobei die eine von der anderen abgeleitet ist.
Bindest du in dem 2. Projekt lediglich die eine Datei aus dem 1. ein, oder verknüpfst du die irgendwie?
Du könntest ja mal einen Test machen, mach dir in einem Projekt eine Klasse, in dem andern auch, die du von der ersten ableitest ohne irgendwelches Drumherum. Wenn das auch kracht, dann wissen wir wenigstens wo es hängt, bzw. was nicht geht. |
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 01.05.2006, 17:02 Titel: |
|
|
Also es sollte so sein, dass man im 1. Projekt (CE) die Klasse aus dem 2. Projekt (Renderer) einbindet und zusätzlich halt die allgemeinen Funktionen aus dem TextureManager hat.
Ich werde mal probieren was das Teil macht wenn beides in einem Projekt ist. Aber wie gesagt, woanders hatte ich das auch schon Projekt-übergreifend gesehen... _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 01.05.2006, 17:27 Titel: |
|
|
Also GreveN deine Vermutung war gar nicht mal unberechtigt...
Beide Klassen in einem Projekt und es funktioniert... so ein Mist
Also wenn jemand weiß, wie das Projektübergreifend geht... ich bin für Tipps dankbar!!! _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
|