Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Pixma

Frischling

  • »Pixma« ist der Autor dieses Themas

Beiträge: 35

Wohnort: Mainz

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

1

05.06.2008, 22:05

Meine Übung zu Listing 7.4

Hallo,
Ich bin jetzt bei dem Kapitel Klassen angekommen und habe alles so weit verstanden.

Nun will ich das Thema Konstruktoren ein wenig festigen und habe, auch ein kleines Programm versucht zu schreiben.
Es klappt leider nicht und ich weiß nicht mehr weiter.

Quellcode

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
#include <iostream>
using namespace std;

class CBow
{
private:

int m_Live;
int m_Geschwindigkeit;
int m_Genauigkeit;

public:

CBow ();
void ZeigeDaten ();
};

CBow::CBow ()
{
Bogenschuetze.m_Live = 100;
Bogenschuetze.m_Geschwindigkeit = 5;
Bogenschuetze.m_Genauigkeit = 50;

Armbrustschuetze.m_Live = 120;
Armbrustschuetze.m_Geschwindigkeit = 2;
Armbrustschuetze.m_Genauigkeit = 100;

}
void CBow::ZeigeDaten ()

{
cout << "Lebenspunkte: " <<m_Live<< endl; 
cout << "Geschwindigkeit: " <<m_Geschwindigkeit<< endl;
cout << "Genauigkeit: " <<m_Genauigkeit<< endl;
}

int main ()
{
CBow Bogenschuetze;
CBow Armbrustschuetze;

Bogenschuetze.ZeigeDaten ();
cout <<endl;
Armbrustschuetze.ZeigeDaten ();

return 0;
}


Fehlermeldung:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
--------------------Konfiguration: Klasse3 - Win32 Debug--------------------
Kompilierung läuft...
test.cpp
C:\c++ für Spieleprogrammierer sources\Klasse3\test.cpp(20) : error C2065: 'Bogenschuetze' : nichtdeklarierter Bezeichner
C:\c++ für Spieleprogrammierer sources\Klasse3\test.cpp(20) : error C2228: Der linke Teil von '.m_Live' muss eine Klasse/Struktur/Union sein
C:\c++ für Spieleprogrammierer sources\Klasse3\test.cpp(21) : error C2228: Der linke Teil von '.m_Geschwindigkeit' muss eine Klasse/Struktur/Union sein
C:\c++ für Spieleprogrammierer sources\Klasse3\test.cpp(22) : error C2228: Der linke Teil von '.m_Genauigkeit' muss eine Klasse/Struktur/Union sein
C:\c++ für Spieleprogrammierer sources\Klasse3\test.cpp(24) : error C2065: 'Armbrustschuetze' : nichtdeklarierter Bezeichner
C:\c++ für Spieleprogrammierer sources\Klasse3\test.cpp(24) : error C2228: Der linke Teil von '.m_Live' muss eine Klasse/Struktur/Union sein
C:\c++ für Spieleprogrammierer sources\Klasse3\test.cpp(25) : error C2228: Der linke Teil von '.m_Geschwindigkeit' muss eine Klasse/Struktur/Union sein
C:\c++ für Spieleprogrammierer sources\Klasse3\test.cpp(26) : error C2228: Der linke Teil von '.m_Genauigkeit' muss eine Klasse/Struktur/Union sein
Fehler beim Ausführen von cl.exe.

Klasse3.exe - 8 Fehler, 0 Warnung(en)


Kann mir jemand helfen, ich würde es gerne zu Laufen bringen :p
Mit freundlichen Grüßen
Dennis

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

05.06.2008, 22:08

Da steht doch eigentlich, was das Problem ist. ;)

C-/C++-Quelltext

1
Bogenschuetze.m_Live = 100; 


Das ist völliger Unsinn. ;)

Probiers mal mit

C-/C++-Quelltext

1
this->m_Live = 100; 


Oder:

C-/C++-Quelltext

1
m_Live = 100; 

Pixma

Frischling

  • »Pixma« ist der Autor dieses Themas

Beiträge: 35

Wohnort: Mainz

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

3

05.06.2008, 22:13

ok thx, nur jetzt sieht die Ausgabe so aus
Lebenspunkte: 120
Geschwindigkeit: 2
Genauigkeit : 100

Lebenspunkte: 120
Geschwindigkeit: 2
Genauigkeit : 100

Aber ich hätte gerne:

Lebenspunkte: 100
Geschwindigkeit: 5
Genauigkeit : 50

Lebenspunkte: 120
Geschwindigkeit: 2
Genauigkeit : 100

Oder gibt es dafür eine andere Methode die ich erst später lerne^^

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

05.06.2008, 22:21

Du scheinst das Prinzip noch nicht ganz verstanden zu haben. ;)

Wenn du eine Klasse hast, dann bezieht die sich immer auf die Instanz, die du erzeugt hast.

C-/C++-Quelltext

1
2
CBow Bogenschuetze;
CBow Armbrustschuetze; 

Du erzeugst hier einen Bogenschützen und einen Armbrustschützen, die beide vom gleichen Typ CBow sind.

C-/C++-Quelltext

1
2
3
4
5
6
7
m_Live = 100;
m_Geschwindigkeit = 5;
m_Genauigkeit = 50;

m_Live = 120;
m_Geschwindigkeit = 2;
m_Genauigkeit = 100; 


Jetzt wird folgender Code für beide Instanzen ausgeführt. Bei dem 2. Teil überschreibst du ja m_Live usw. wieder mit einem anderen Wert.

Wenn du den ctor (Konstruktor) jetzt so schreibst (in der Klassendeklaration nicht vergessen anzupassen), dann kannst du die Werte bei der erzeugung übergeben.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
CBow::CBow (int live, int v, int prec)
{
Bogenschuetze.m_Live = live;
Bogenschuetze.m_Geschwindigkeit = v;
Bogenschuetze.m_Genauigkeit = prec;

} 

...

CBow schuetze (1000,5,100); //live = 1000, v = 5 , prec = 100

Pixma

Frischling

  • »Pixma« ist der Autor dieses Themas

Beiträge: 35

Wohnort: Mainz

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

5

05.06.2008, 22:26

hmm also in der Listing wurden noch keine Variablen über die Memberfunction übertragen ist das villeicht ein konstruktor mit parameterliste. Das wäre das nächste Listing

klappt irgendwie immer noch nicht

#include <iostream>
using namespace std;

class CBow
{
private:

int m_Live;
int m_Geschwindigkeit;
int m_Genauigkeit;

public:

CBow (int live, int v, int prec);
void ZeigeDaten ();
};

CBow::CBow (int live, int v, int prec)
{
Bogenschuetze.m_Live = live;
Bogenschuetze.m_Geschwindigkeit = v;
Bogenschuetze.m_Genauigkeit = prec;

Armbrustschuetze.m_Live = live;
Armbrustschuetze.m_Geschwindigkeit = v;
Armbrustschuetze.m_Genauigkeit = prec;

}
void CBow::ZeigeDaten ()

{
cout << "Lebenspunkte: " <<m_Live<< endl;
cout << "Geschwindigkeit: " <<m_Geschwindigkeit<< endl;
cout << "Genauigkeit: " <<m_Genauigkeit<< endl;
}

int main ()
{
CBow Bogenschuetze (1000, 120, 100);
CBow Armbrustschuetze (1000, 60, 50);

Bogenschuetze.ZeigeDaten ();
cout <<endl;
Armbrustschuetze.ZeigeDaten ();

return 0;
}

Pixma

Frischling

  • »Pixma« ist der Autor dieses Themas

Beiträge: 35

Wohnort: Mainz

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

6

05.06.2008, 22:40

ok funzt habs umgeändert

Quellcode

1
2
3
4
5
6
CBow::CBow (int live, int v, int prec)
{
m_Live = live;
m_Geschwindigkeit = v;
m_Genauigkeit = prec; 
}


Thx :)

Werbeanzeige