Problem bei Klassenzugriff bzw deklaration
-
Hi, ich hab n Problem bei der erstellen einer bidirektionalen Verbindung zwischen zwei Klassen. Hier mal die Header files der 2 Klassen
#if !defined(_GELDAUTOMAT_H) #define _GELDAUTOMAT_H #include "Geldausgabe.h" #include "Display.h" #include "Kartenleser.h" #include "Tastatur.h" #include "Grafik.h" #include <string.h> class Geldautomat { public: Geldautomat(); ~Geldautomat(); void wartenAufKarte(); void gedruecktSeitentaste1(); void gedruecktSeitentaste2(); void gedruecktSeitentaste3(); void gedruecktSeitentaste4(); void gedruecktSeitentaste5(); void gedruecktSeitentaste6(); void gedruecktZiffer(int ziffer); void gedruecktBestaetigen(); void gedruecktKorrektur(); void gedruecktAbbruch(); private: int status; Geldausgabe *Ausgabe; Display *meinDisplay; Kartenleser *K_leser; Tastatur *meineTastatur; Grafik *meineGrafik; }; #endif //_GELDAUTOMAT_H[/code]#if !defined(_TASTATUR_H) #define _TASTATUR_H #include "Grafik.h" #include "Display.h" #include "Haupttaste.h" #include "SeitenTaste.h" #include "ZiffernTaste.h" #include "Geldautomat.h" //Geldautomat einbinden class Tastatur { public: Tastatur(Grafik *g, Display *d), Geldautomat *gmat); ~Tastatur(); void ausfuehrenAktion(); void zeichnen(); int drueckenECKarte(); int drueckenGeldschacht(); void zeigeGeldauswahl(); void zeigeProviderAusgewaehlt(int lassen); void zeigeAlleProvider(); void zeigeMenueAuswahl(); void zeigeHandygeld(); void zeigeLeereSeitentasten(); private: void performAction(int n); Haupttaste *Haupttasten[3]; SeitenTaste *Seitentasten[6]; ZiffernTaste *Tastenblock[10]; Geldautomat *ga; //<---- Findet Typ Geldautomat nicht Grafik *g; Display *meinDisplay; }; #endif //_TASTATUR_Hmeine MAIN erzeugt Geldautomat, und der erzeugt sich ne Tastatur mit paar parametern. In der Tastur.h findet er aber den Typ Geldautomat nich. Ich nehm an weil ich bereits in Geldautomat.cpp die Geldautomat.h includet hab, includet er es in Tastatur.h nich mehr.
Weis einer rat wie Tastatur.h die Geldautomat Klasse kennt?!
MfG
Gast0815
-
Du kannst nicht zwei Header sich gegenseitig inkludieren lassen.
Als Workaround solltest du dafür sorgen, dass z. B. nur die Deklaration von Geldautomat in tastatur.h benötigt wird (was ja schon der Fall ist) und dann anstatt geldautomat.h zu inkludieren, eine Vorwärtsdeklaration von Geldautomat zu machen.
-
Michael E. schrieb:
Du kannst nicht zwei Header sich gegenseitig inkludieren lassen.
Als Workaround solltest du dafür sorgen, dass z. B. nur die Deklaration von Geldautomat in tastatur.h benötigt wird (was ja schon der Fall ist) und dann anstatt geldautomat.h zu inkludieren, eine Vorwärtsdeklaration von Geldautomat zu machen.
ähm... kannste des genauer erklären?...
ich ab mal in Tastatur.h statt #include "Geldautomat.h" einfach class Geldautomat gemacht. klappt soweit, er findet den Typ, aber das is ja dann sozusagen ne andere Klasse "Geldautomat"...
Hatte aber dann im Tastatur Konstrukto probleme die referenz zum richtigen Geldautomat dem *ga zuzuweisen...
Ist das so wie du es gemeint hast mit dem "Vorwärtsdeklaration" ?!
Könntest mir vllt die code zeilen für die richtige zuweisung sagen?ich habs mit dem versucht:
im Geldautomat.cpp
meineTastatur=new Tastatur(meineGrafik, meinDisplay, this);und im Tastatur.cpp Konstruktor dann:
ga=geldmat;dann konnt ich aber trotzdem nich mit ga->gedruecktSeitentaste1(); zugreifen weil der mir sagt, dass ich:
in Tastatur.cpp: invalid use of undefined type `struct Geldautomat'und in Tastatur.h die zeile class Geldautomat;
10 D:\PRIVAT\PRIVATE\Igor\Studium\3. Semester\Fahrzeugsensorik\Geldautomatforward declaration of `struct Geldautomat'Help plz

-
Du musst in Tastatur.cpp natürlich noch den Header für Geldautomat einbinden.
-
finix schrieb:
Du musst in Tastatur.cpp natürlich noch den Header für Geldautomat einbinden.
ouuu man... genau da dran hat's gelegen.. Daaaaankeeeee diiiiiiiiiir.. läuft jetz alles...
