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

Phil239

Frischling

  • »Phil239« ist der Autor dieses Themas

Beiträge: 79

Beruf: Student

  • Private Nachricht senden

1

21.02.2009, 15:46

Problem mit (abgeleiteten) Klassen

Hallo,
ich habe ein Problem beim Einbinden einer Header-Datei. Der Compiler zeigt mir folgende Fehler:

Quellcode

1
2
line 12: error: invalid use of undefined type 'struct Animal'
line 9:  error: forward declaration of 'struct Animal'

Folgender Programmcode:
Animal.h:

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
/***********************************
**     ANIMAL.H
**     ========
**
**     Deklaration der Animal-Klasse
**
************************************
*/

// Include Dateien

#include <iostream>
#include "Runner.h"

class Animal
{
    private:
        int x;
        int y;
    public:
        // Konstruktor

        Animal(int, int);

        // Destruktor

        ~Animal();

        // Methoden

        int Run();
        int Turn(int);
};

Runner.h (in der der Fehler ist):

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
/***********************************
**     RUNNER.H
**     ========
**
**     Deklaration der Runner-Klasse
**
************************************
*/
class Animal;

class Runner : public Animal
{
    public:
        // Konstruktor

        Runner(int, int);

        // Destruktor

        ~Runner();

        // Zusätzliche Methoden

        int Run(int iSteps);
};

Animal ist doch aber eine Klasse und keine Struktur?!
Benutze Code::Blocks mit MinGW.
Was könnte denn der Fehler sein?
Schonmal Danke im Voraus!
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

21.02.2009, 15:48

Eine vorwärtsdeklaration reicht hier nicht. Die Klasse muss komplett bekannt sein. (also sollte da ein include hin..)

Phil239

Frischling

  • »Phil239« ist der Autor dieses Themas

Beiträge: 79

Beruf: Student

  • Private Nachricht senden

3

21.02.2009, 16:08

wenn ich jetzt aber in die datei Runner.h #include "Animal.h" reinschreibe, dann kommen ziemlich viele fehler beim Kompilieren und wenn ich abbreche steht da :

Quellcode

1
#include nested too deeply
in der Datei Animal.h (also für Runner.h und iostream)
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.

4

21.02.2009, 16:11

mach include guards rein, also z.B.

C-/C++-Quelltext

1
2
3
4
5
6
#ifndef ANIMAL_H_INCLUDED
#define ANIMAL_H_INCLUDED

//eigentlicher Inhalt (einschließlich sämtlicher includes)


#endif

Codeblocks kann die auch beim erstellen der Datei direkt einbauen ;)

Phil239

Frischling

  • »Phil239« ist der Autor dieses Themas

Beiträge: 79

Beruf: Student

  • Private Nachricht senden

5

21.02.2009, 16:19

wenn jetzt das hier in der Runner.h steht:

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
/***********************************
**     RUNNER.H
**     ========
**
**     Deklaration der Runner-Klasse
**
************************************
*/
#ifndef ANIMAL_H_INCLUDED
#define ANIMAL_H_INCLUDED
#include "Animal.h"

class Runner : public Animal
{
    public:
        // Konstruktor

        Runner(int, int);

        // Destruktor

        ~Runner();

        // Zusätzliche Methoden

        int Run(int iSteps);
};

#endif

kommen folgende fehler:

Quellcode

1
2
error: redefinition of 'class Animal'
error: previous definition of 'class Animal'


wenn ich aus der Datei Runner.h das #include "Animal.h" rausnehme kommt der fehler hier:

Quellcode

1
error: expected class-name before '{' token


PS: wo kann ich das bei Code:Blocks einstellen?
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

6

21.02.2009, 16:21

Warum inkludiert denn Animal.h die Runner.h? - Das ist ansich schon falsch..

Nimm das raus, dann sollte es gehen..

Phil239

Frischling

  • »Phil239« ist der Autor dieses Themas

Beiträge: 79

Beruf: Student

  • Private Nachricht senden

7

21.02.2009, 16:26

dann bleibt aber das problem, dass der compiler die Datei runner.h nicht mitcompiliert :?:
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

8

21.02.2009, 16:45

Dann macht die Klasse auch keinen Sinn.. :roll:

Die sollte eh noch eine Implementierung haben. (eine .cpp, wo der Konstruktor/Funktionen definiert werden).

Dann brauchst du noch einen Benutzer der Klasse.. z.B in der main, wo du eine Instanz anlegst.. Warum sollte der Compiler etwas kompilieren, was nirgends gebraucht wird?!

Phil239

Frischling

  • »Phil239« ist der Autor dieses Themas

Beiträge: 79

Beruf: Student

  • Private Nachricht senden

9

21.02.2009, 16:49

um das eben genannte Problem zu beheben, habe ich einfach noch eine Datei namens main.h hinzugefügt, die die Dateien Animal.h und Runner.h includiert (damit halt alles kompiliert wird). Jetzt kommen beim Compilieren noch diese Fehler hier:

Quellcode

1
2
error: redefinition of 'class Animal' 
error: previous definition of 'class Animal'


Was soll das jetzt?
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.

Phil239

Frischling

  • »Phil239« ist der Autor dieses Themas

Beiträge: 79

Beruf: Student

  • Private Nachricht senden

10

21.02.2009, 16:53

@ drakon: das wär ja später noch gekommen ^^
hab das problem jetzt übrigens behoben: ich musste einfach nur in der Datei Runner.h das #include "Animal.h" rausnehmen. jetzt mach ich mich an die implementierung.^^
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.

Werbeanzeige