Guten Tag!
Ich habe ein Problem mit den Zeigern auf Klassen. Ähnlich wie Spacegaier gestern abend geschrieben hat. Ich hatte eigentlich gedacht das ich das verstanden hätte aber im Buch vom Heiko werden dabei lediglich Beispiele vorgestellt wo dies innerhalb einer Datei passiert bzw. die Membervariablen public sind. (Was ja auch nicht im Sinne des Erfinders ist)
Aufgabenstellung:
Ich möchte 2 Raumschiff Instanzen in einer anderen Datei verändern.
Und das ganze mittels Zeiger (über die Instanz Adressen).
Wieso klappt das so nicht? Hier mein Quelltext: (Läßt sich übersetzen zeigt aber nicht die gewünschte Wirkung!)
Ich habe 3 cpp Dateien und 2 Header Dateien:
haupt.cpp
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include <iostream>
#include "CRaumschiff.h"
#include "Funktion.h"
using namespace std;
int main()
{
CRaumschiff Normalergegner;
//Es werden zwei Raumschiff Instanzen erzeugt
CRaumschiff Endgegner;
//Jetzt wird ein Raumschiff auf dem Stack erzeugt mit Namen Endgegner er besitzt normaler Weise beim erzeugen 1000 Lebenspunkte
cout<<"Adresse des Endgegners : "<<&Endgegner<<endl; //Ausgabe der Adresse des Endgegners
cout<<"Der Endgegner hat die Lebensenergie von : "<<Endgegner.Zeige_Energie()<<endl;//Ausgabe der Lebenspunkte des Endgegners ist das so richtig?? oder mittels :: oder ->?????
Funktion_Lebensenergie_aendern(&Endgegner); //Aufruf der Funktion mit der Adresse des Endgegners um diesmal die Lebensenergie des Endgegners zu verändern
cout<<"Der Endgegner hat nun eine Lebensenergie von : "<<Endgegner.Zeige_Energie()<<endl;//Ausgabe der Lebensenergie
return 0;
}
|
CRaumschiff.cpp
|
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
|
#include "CRaumschiff.h"
#include <iostream>
using namespace std;
CRaumschiff::CRaumschiff()
{
cout<<"Neues Raumschiff erstellt!"<<endl;
m_Energie=1000;
m_Team=1;
}
CRaumschiff::~CRaumschiff()
{
cout<<"Raumschiff zerstoert!"<<endl;
}
CRaumschiff::Setze_Energie (int Energie)
{
m_Energie = Energie;
}
CRaumschiff::Setze_Team (int Team)
{
m_Team = Team;
}
CRaumschiff::Zeige_Energie()
{
cout<<"Die Energie des Raumschiffs ist!"<<m_Energie<<endl;
}
CRaumschiff::Zeige_Team()
{
cout<<"Das Raumschiff ist im Team: "<<m_Team<<endl;
}
CRaumschiff::Energie_subtrahieren(int Verletzung)
{
m_Energie -= Verletzung;
}
|
Funktion.cpp
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
|
#include "Funktion.h"
#include "CRaumschiff.h"
void Funktion_Lebensenergie_aendern(CRaumschiff *pZeiger)
{
pZeiger->Setze_Energie(500);
}
|
CRaumschiff.h
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
#ifndef __Funktion
#define __Funktion
#include "CRaumschiff.h"
void Funktion_Lebensenergie_aendern(CRaumschiff *pZeiger);
#endif
|
CRaumschiff.h
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#ifndef _CRaumschiff
#define _CRaumschiff
class CRaumschiff
{
private:
int m_Energie;
int m_Team;
public:
CRaumschiff();
~CRaumschiff();
Setze_Energie(int Energie);
Setze_Team (int Team);
Zeige_Energie();
Zeige_Team();
Energie_subtrahieren(int Verletzung);
};
#endif
|
könnte man vielleicht mal ein kleines Beispiel schreiben wie man dabei vorgehen sollte?
In der main() muss ich ja dem Compiler verständlich machen auf welche Instanz ich mich beziehen will also über die Adressen mittels Zeiger.
Dazu benötigt ja die Funktion ja auch schon die Klasse der Raumschiffe da ich ja sonst keinen Zeiger wie (void Funktion_Lebensenergie_aendern(CRaumschiff *pZeiger) erzeugen kann benötigt ja die Klasse der Raumschiffe.
Mit bestem Gruß
Jens
Ich hoffe das könnte vielleicht einmal jemand klären also aus dem Buch vom Heiko kommt das nicht wirklich gut hervor.