JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=314019f320df667f645c8dec02a03361Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Singleton / Klasse public machen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 01.05.2006, 14:22    Titel: Singleton / Klasse public machen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 01.05.2006, 14:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 01.05.2006, 14:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 01.05.2006, 14:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 01.05.2006, 15:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 01.05.2006, 15:20    Titel: Antworten mit Zitat

Aber den TextureManager-Konstruktor hast du auch irgendwo definiert?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 01.05.2006, 15:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 01.05.2006, 15:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 01.05.2006, 16:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 01.05.2006, 16:26    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 01.05.2006, 17:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 01.05.2006, 17:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum