Hallo zusammen =)
Bin gerade dabei die Aufgabe aus dem Kapitel 7.8 zu bearbeiten.
Dafür wollte ich, wie auf den vorherigen Seitenim Buch, zunächst eine Klasse erzeugen und dann als Objekt einen Zeiger erstellen.
Anschließend soll damit eine Instanz auf dem Heap erzeugt werden.
Wenn ich nun aber die Memberfunktion
Variablentest() (Zeile 51) aufrufen will und auf der linken Seite des Zuweisungsoperators der Zeiger steht, bekomme ich am Zeiger folgende Fehlermeldung:
"Der Ausdruck muss einen Klassentyp aufweisen".
Wenn ich als Operator den Pfeil "->" verwende, kommt die Fehlermeldung nicht.
Ich würde jetzt aber gerne mal wissen warum die Fehlermeldung überhaupt kommt, wenn das bei den vorherigen Beispielen doch so prima funktioniert hat.
Quelltext:
|
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
56
57
58
|
#include<iostream>
using namespace std;
class CRaumschiff
{
private:
// Membervariablen
int m_xPos;
int m_yPos;
int m_Energie;
float m_fGeschwindigkeit;
public:
// Memberfunktionen
CRaumschiff(); // Konstruktor ohne Parameterliste wird aufgerufen
CRaumschiff(int xPos, int yPos); // Konstruktor mit Parameterliste
void Variablentest(int xPos, int yPos);
};
// Variablentest
// Aufgabe: Erkennen ob Raumschiff im Spielfeld ist oder nicht.
//
void CRaumschiff::Variablentest(int xPos, int yPos)
{
if (0<= xPos <=800 && 0<= yPos <=600)
cout<<"Koordinaten wurden gesetzt";
else
{
cout<<"Koordinaten außerhalb des gueltigen Bereiches";
m_xPos = 0;
m_yPos = 0;
}
}//Variablentest
main()
{
//Variablen
int xPos = 320; // x Position des Gegnerischen Raumschiffes
int yPos = 610; // y Position des Gegnerischen Raumschiffes
CRaumschiff *pSpieler = NULL; // Instanz erzeugen (als Pointer)
CRaumschiff *pGegner = NULL; // Instanz erzeugen (als Pointer)
// Speicher auf dem Heap reservieren,
pSpieler = new CRaumschiff;
pGegner = new CRaumschiff(xPos, yPos);
pGegner.Variablentest(xPos, yPos); // Testen, ob der Gegner im Spielfeld ist
// Speicher freigeben
delete[] pGegner;
pGegner= NULL;
return 0;
}
|
Theoretisch bin ich so vorgegangen, wie das im Buch auch gemacht wird. Mit ausnahme der "[]" am Zeiger, denn mit denen würde es wieder funktionieren aber komme nicht drauf warum
Danke für die Hilfe =) Gruß next