C++ Klassen gegenseitig include

Squicky

Lt. Commander
Registriert
Sep. 2002
Beiträge
1.404
Hallo

Mein C++ Programm hat zwei Klassen. Jede Klasse besteht aus einer .cpp und einer .h Datei.
Die Klassen werden in den .h Dateien deklariert.
Die Klassen "kennen" sich gegen seitig um die public Methoden/Variable der anderen Klasse zu nutzen. Dieses kennen bezieht sich schon auf die .h Dateien, da dort eine Referenz der anderen Klasse deklariert wird.

Kennt jemand folgende Meldung:
Code:
In file included from ClassA.h:5:0,
                 from ClassA.cpp:2:
ClassB.h:13:5: error: ‘ClassA’ does not name a type

Wie kann man dieses Problem lösen?

Danke
 
emm, kann mich irren, aber class kleinschreiben oda?
 
Hi,

ich kenne zwar gerade den Fehler nicht, aber wenn es um das Problem der gegenseitigen Abhängigkeit geht und include-Anweisungen Ringschlüsse produzieren würden, helfen dir forward-Deklarationen in folgenden Sinne:

In A.h (Variante 1):
Code:
class A {
    void bla(class B &b);
};
In B.h (Variante 2):
Code:
class A;
class B {
    void blub(A &a);
}

Grüße, df
 
ClassB kennt ClassA nicht. Wie sieht dein momentaner Aufbau aus?

Normalerweise geht es so:
Code:
// ClassA.h:
#ifndef CLASSA_H
#define CLASSA_H

// class { ... }

#endif

// ClassA.cpp
#include "ClassA.h"

// code
Code:
// ClassB.h
#ifndef CLASSB_H
#define CLASSB_H

// class { ... }

#endif

// ClassB.cpp
#include "ClassB.h"

// code
Code:
// code mit beiden klassen
#include "ClassA.h"
#include "ClassB.h"

// code
Alternativ einfach ein class ClassA; in ClassB.h setzen.
 
Du solltest #include-Anweisungen in Headerdateien von Klassen wenn möglich vermeiden und stattdessen auf Forward Declaration setzen, also im Prinzip dem Compiler nur bekannt machen, dass es eine Klasse mit nem bestimmten Namen gibt - ohne weitere Details.

z.B. einfach
class A;

in der Headerdatei voranstellen, wo du darauf Bezug nimmst.
 
Zurück
Oben