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

Meandor

Frischling

  • »Meandor« ist der Autor dieses Themas

Beiträge: 55

Wohnort: Oberhausen

Beruf: Student

  • Private Nachricht senden

1

02.01.2006, 15:38

Vererbung



Ich habe das Buch vom Heiko gelesen und hänge am Listing 7.11
soweit ist alles klar!
Aber ich versuche jetzt jede Klasse in eine eigene cpp bzw. hpp Datei zu schreiben. (natürlich auch die abgeleitet Klassen)

Dabei gibt es nur Compiler Fehler.
bei "CMinenleger.h"

[b]#include <iostream>
using namespace std;

class CMinenleger : public CRaumschiff
{
private:
int m_minen;
public:
CMinenleger();
void minelegen()
~CMinenleger();
};


Liegt das daran das der Compiler CRaumschiff nicht kennt?
Wie bringe das dem denn bei? Mit CRaumschiff.h einbinden gibt es noch viel mehr Fehler!!

Was ich brauche ist also eine Anleitung wie man einzelne Klassen ob abgeleitet oder nicht in eigene hpp bzw. cpp Dateien schreibt (Zitat 7.9 Seite 219 2.Auflage)
Wie macht man das??

Mit bestem Gruß
Meandor

[/b]

Anonymous

unregistriert

2

02.01.2006, 15:43

Binde Deine CRaumschiff.h ein und zeig uns die Fehler. Achja: Wir haben sowas wie Code-Tags ;)

Meandor

Frischling

  • »Meandor« ist der Autor dieses Themas

Beiträge: 55

Wohnort: Oberhausen

Beruf: Student

  • Private Nachricht senden

3

02.01.2006, 16:21

Okay ich schicke einfach mal alles in kurzer Form:

[code]

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//Haupt.cpp Hier werden später die Raumschiffe und Minenleger erzeugt 

#include "CRAUMSCHIFF.H"
#include "CMINENLEGER.H"

int main()
{

    return 0;
}


//CRAUMSCHIFF.cpp


#include "CRAUMSCHIFF.H" 
#include "CMINENLEGER.H"
CRaumschiff::CRaumschiff()
{
    m_farbe=0;
    m_energie =1000;
    cout <<"Raumschiff mit Standartkonstruktor erstellt"<<endl;
}

CRaumschiff::starten()
{
    cout<<"Raumschiff startet!"<<endl;
}

CRaumschiff::landen()
{
    cout<<"Raumschiff gelandet!"<<endl;
}

CRaumschiff::~CRaumschiff()
{
    cout<<"Raumschiff zerstört!"<<endl;
}

//CMINENLEGER.cpp

#include "CMINENLEGER.H"
#include "CRAUMSCHIFF.H"
CMinenleger::CMinenleger()
{   
    m_minen=10;
    cout <<"Minenleger wurde erstellt!"<<endl;
}
    
CMinenleger::minelegen()
{
    m_minen--;
    cout <<"Mine gelegt. Es sind noch" <<m_minen<< " Minen uebrig!"<<endl;
}

CMinenleger::~CMinenleger()
{
    cout<<"Der Minenleger wird zerstoert!"<<endl;
};

//CRAUMSCHIFF.H


#include <iostream>
using namespace std;

class CRaumschiff
{
protected:
    int m_farbe;
    int m_energie;
public:
    CRaumschiff();
    void starten(); 
    void landen(); 
    ~CRaumschiff();
};

//CMINENLEGER.H


#include <iostream>
using namespace std;

class CMinenleger : public CRaumschiff
{
private:
    int m_minen;
public:
    CMinenleger();
    void minelegen()
    ~CMinenleger();
};


Meine Frage ist jetzt in welche Datei muss ich welche Header includen?? Damit er seine Basisklassen findet? Habe schon alle Kombis ausprobiert! Was mache ich denn falsch![/b]

C-/C++-Quelltext

1


Anonymous

unregistriert

4

02.01.2006, 16:25

Ist klar, bei Dir fehlen überall die Includeguards!

Gib mal "Include Guards" (oder zusammengeschrieben) hier in die Suche ein. Das Problem wurde schon X-Mal behandelt.

5

02.01.2006, 17:04

pack einfach nen dummes #pragma once in jede Header Datei und du solltest ruhe haben---

und CRaumsciff.cpp muss nur #include "CRaumschiff.h" haben -.- nicht das minenlege dings---
und bei CMienenleger.cpp muss nur CMieneneleger.h includiert werden...
in CMinenenleger.h muss du noch #include "CRaumschiff.h" einfügen...


Soo.. dann solltest du dir mal die Ungarische Notation angucken -.- Es ist nen bissel Panne die Headerdateien mit nem C zu beginnen--- das C ist das Präfix für Klassen... und das i für nen int ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Meandor

Frischling

  • »Meandor« ist der Autor dieses Themas

Beiträge: 55

Wohnort: Oberhausen

Beruf: Student

  • Private Nachricht senden

6

02.01.2006, 17:45

Danke habe ich gefunden! Ich glaube sogar das ich es verstanden habe zumindest funktioniert es.

Diese Guards kann man sich ja in etwa so vorstellen wie ein Schalter oder? (Semaphore Variable) Einmal definiert werden sie beim nächsten Aufruf direkt übersprungen. Und somit wird der Header nicht zweimal bearbeitet.

Und mit den # wird der Präprozessor im Vorfeld die ganze Sachlage verstehen und fängt dann erst mit dem compilieren an.

Anonymous

unregistriert

7

02.01.2006, 17:55

Devil
1. #pragma once läuft nicht auf jedem Compiler! Daher: Includeguards.
2. Am besten sollte man sich die ungarische Notation erst gar nicht angucken, denn die ist Panne
3. C ist für Objekte, nicht für Klassen. Klassen werden gesplittet nach Deklaration und Implementation (*.h, *.cpp) und daher nennt man diese Dateien dann auch wie das Objekt. Grundregel no1 für jeden C++ Coder.
4. I fürn int? ich dachte das wäre n wie numeric?

CW_Kovok

Alter Hase

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

8

02.01.2006, 18:11

das kommt auf die notation an, je nach buch ist sie anders
Was es alles gibt, das ich nich brauche - Aristoteles

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

9

02.01.2006, 18:13

jeder muss/wird sich doch eh seine eigene Notation beibringen, das Problem kommt ja erst dann auf wenn man im Team arbeitet, aber wenn man eine konstande, gut lesbare Schreibweise hat, sehe ich da auch keine Probleme.

CW_Kovok

Alter Hase

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

10

02.01.2006, 18:17

konstant reicht nich, mein bekannter programmiert konstant mit den Variablen i, ii, iii, j, jj, jjj, und allen variationen daraus
Was es alles gibt, das ich nich brauche - Aristoteles

Werbeanzeige