Hallo nochmal, ich weiß ich fange an zu nerven, aber ich würde ungern mein projekt aufgeben und hoffe das ihr mir noch einmal, hoffentlich zum letzen mal helfen könnt.Ich versuche meine Probleme immer selber zu lösen bevor ich sie hier herreinstelle, aber gerade bei Laufzeitfehlern, habe ich oftmals ein Problem.
Mein Problem ist das ich jetz versuche, über eine Singelton-Klasse, in einer andern klasse und somit auch in einer andern cpp datei,auf d3ddev zu zu greifen.Jedoch funktioniert das nicht wie ich das gerne möchte, da d3ddev scheinbar sobald ich aus der cpp datei springe nichtmehr deklariert ist und mein neuer Pointer den wert 0xcdcdcdcd erhält.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
//Framework.cpp
//andere includes
#include "Singleton.hpp"
#define g_pFramework CFramework::Get()
class CFramework : public TSingleton<CFramework>
{
public:
//Ander funktion in der d3ddev ein wert zugewiesen wird
LPDIRECT3DDEVICE9 GetDev() {return d3ddev;} //Return Directx Device
private:
LPDIRECT3DDEVICE9 d3ddev; //the pointer to the device class
//Weiter Variablen
};
//Andere Headerdatei um auf d3ddev zuzugreifen.
class CSprite
{
public:
CSprite();
//Weiter funktionen in der d3dev benötigt wird
private:
LPDIRECT3DDEVICE9 *m_pDev; //Copie of d3ddev
};
//CPP datei
CSprite::CSprite() //Construktor
{
m_pDev=g_pFramework->GetDev();
};
//Andere Funktionen
|
Die Singleton.HPP ist die selbe wie aus dem buch von Heiko Kalista der vollständigkeithalber hier nochmal der Inhalt:#ifndef SINGLETON_HPP
#define SINGLETON_HPP
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
template <class T>
class TSingleton
{
protected:
// Membervariablen
static T *m_pSingleton; // Statisches Objekt
public:
// Memberfunktionen
// Destruktor
//
virtual ~TSingleton ()
{
}
// Get
//
// Aufgabe: Wenn nötig, statisches Objekt erzeugen und
// Zeiger darauf zurückgeben
//
inline static T* Get ()
{
// Existiert schon eine Instanz?
if (!m_pSingleton)
m_pSingleton = new T; // Nein, dann neue Instanz erzeugen
// Zeiger auf die Instanz zurückgeben
return (m_pSingleton);
} // Get
// Statisches Objekt freigeben
//
static void Del ()
{
// Gab es eine Instanz?
if (m_pSingleton)
{
delete (m_pSingleton); // Ja, dann freigeben
m_pSingleton = NULL; // und Zeiger auf NULL setzen
}
} // Del
};
// Die statische Variable erzeugen
//
template <class T>
T* TSingleton<T>::m_pSingleton = 0;
#endif
|
die Fehlermeldung die ich erhalte ist :
Eine Ausnahme (erste Chance) bei 0x00a81e04 in Direct3dinit.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcdcdcdcd.
Unbehandelte Ausnahme bei 0x00a81e04 in Direct3dinit.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcdcdcdcd.
Wenn noch fragen zum restlichem Code, debugger angaben oder anderes bitte Fragen.
Lg dna
PS: Ich hoffe es ist in ordnung wenn ich das hier her poste, ohne ein neues thema aufzumachen.