include und Vererbung in Dreiecksbeziehung
-
Hi,
ich habe ein Problem, dass ich auf ein Beispielprogramm von 3 Klassen runtergebrochen habe. Leider erkenne ich nicht, woran das Kompilieren hier scheitert. Kann mir jemand weiterhelfen?
#ifndef A_HPP #define A_HPP #include "c.hpp" #include "b.hpp" class c; class b; class a { public: a(){} ; }; #endif#ifndef C_HPP #define C_HPP #include "a.hpp" class a; class c { public: c(){}; }; #endif#ifndef B_HPP #define B_HPP class c; class b: public c { public: b(){}; }; #endifDie Fehlermeldungen lauten immer etwas anderes, jenachdem, wie ich das Problem zu lösen versuche. Wenn ich das richtig verstehe, ist die gemeinsame Basis aber immer, dass die Klasse b nicht von c erben kann, da c nur als struct verstanden wird:
../src/b.hpp:6: error: invalid use of incomplete type ‘struct c’
../src/b.hpp:4: error: forward declaration of ‘struct c’Grüße, dulle
-
Bei mir erstellt er deinen Code mittels include a.hpp in der main. Aber versuchs mal so:
#ifndef A_HPP #define A_HPP #include "c.hpp" #include "b.hpp" class c; class b; class a { public: a(){} ; }; #endif#ifndef C_HPP #define C_HPP class a; // <---- class c { public: c(){}; }; #endif#ifndef B_HPP #define B_HPP #include "c.hpp" // <---- class b: public c { public: b(){}; }; #endif
-
Vermutlich musst du eine Klasse mitsamt Funktionen und Variablen deklarieren (also nicht bloß class c;), bevor du davon erben kannst. Sonst wäre nämlich eine im-Kreis-Vererbung möglich (a erbt von c, b erbt von a und c erbt von b).
-
Vermutlich musst du eine Klasse mitsamt Funktionen und Variablen deklarieren (also nicht bloß class c, bevor du davon erben kannst.
Ja, das ist korrekt. Nennt man aber Klasse definieren, nicht deklarieren.
-
@HighLigerBiMBam: Danke dir, die Lösung funktioniert, nach Beseitigung ein paar weiterer Compiler-Fehler auch in meinem größeren Programm.
@wxSkip und theta: okay, mir war nicht bewusst, dass das ein Problem darstellen kann keine Variablen und/oder Funktionen definiert zu haben, aber in meinem eigentlichen Programm habe ich natürlich genauer definierte Klassen.
-
dulle schrieb:
@HighLigerBiMBam: Danke dir, die Lösung funktioniert, nach Beseitigung ein paar weiterer Compiler-Fehler auch in meinem größeren Programm.
@wxSkip und theta: okay, mir war nicht bewusst, dass das ein Problem darstellen kann keine Variablen und/oder Funktionen definiert zu haben, aber in meinem eigentlichen Programm habe ich natürlich genauer definierte Klassen.
Ich weiß nicht, ob du verstanden hast, was wir gemeint haben (das ist nämlich das, was HighLigerBiMBam gemacht hat):
//so geht es nicht: class A; class B : public A { //blah } class A { //blah }//und so geht es: class A { //blah } class B : public A { //blah }
-
Lies mal das hier.