struct in Headerdatei
-
Hallo liebe Gemeinde,
klingt vllt. ein bischen komisch, aber wisst ihr wo man structs deklarieren muss? In der Headerdatei? Ich habe folgendes Beispiel:
In der Headerdatei:
public: struct Knoten{ Knoten*vater, *links, *rechts; double wert; explicit Knoten(const double&wert): vater(0), links(0), rechts(0), wert(wert) {} }; Knoten*wurzel; und virtual Knoten* get_Minimum(Knoten*knoten);und in der .cpp beispielsweise die Funktion:
Knoten* get_Minimum(Knoten*knoten) { Knoten*aktuell = knoten; while(aktuell->links) aktuell = aktuell->links; return aktuell; }Als Fehlerausgabe habe ich: 1) der Bezeichner Knoten ist nicht definiert. 2) Die Deklaration von get_Minimum ist nicht mit der aus der Headerdatei kompatibel. Woran liegt das?
Danke euch,
Tanja
-
structs schreibt man in die Header also .h vor die Klasse.
-
Ja Enno ich hab Sie in der Headerdatei. Aber trotzdem stimmt etwas nicht.
-
tanja.hopfer schrieb:
Aber trotzdem stimmt etwas nicht.
Zeig ein Minimalbeispiel, das das Problem reproduziert.
-
struct Knoten { Knoten* vater, *links, *rechts; double wert; explicit Knoten(double wert); virtual Knoten* get_Minimum(Knoten* knoten); };So sollte das aussehen.
-
Das geht auch nicht out.
-
@MFK: in der .cpp sind bei den folgenden:
Knoten* get_Minimum(Knoten*knoten) {Knoten und get_Minimum rot unterstrichen und mit den Fehlerangaben von ganz oben (1) und 2)) versehen.
-
Zeig ein Minimalbeispiel, das das Problem reproduziert.
Du lieferst hier nur Fragmente ab, an denen man das Problem nicht erkennen kann. Darum können die Helfer nur raten, und du antwortest mit "geht auch nicht". Das bringt uns nicht weiter!
In deiner cpp-Datei fehlt übrigens die Include-Direktive für den Header.
-
tanja ich sagte VOR die Klasse.

Probier mal so:
struct bla{ int bla; }; class lala{ public: lulu(); private: int uhi; }
-
Das struct ist in der Klasse definiert.
-
@MFK: Sorry, ich weiss nicht was du mit Minimalbeispiel meinst.

-
tanja.hopfer schrieb:
@MFK: Sorry, ich weiss nicht was du mit Minimalbeispiel meinst.

So wenig Code wie möglich, aber eben so viel, dass ich das meinem Compiler vorwerfen kann, und der dieselbe Fehlermeldung ausspuckt.
Bei den Fragmenten, die du bisher gezeigt hast, besteht immer die Gefahr, dass du entscheidende Stellen weggelassen oder geändert hast.
-
Methode und Member sollten Teil der Klasse sein.
In der cpp-Datei:
Knoten* Baum::get_Minimum(Knoten*knoten) { }Auch finde ich gechachtelte structs sehr unschoen.
-
using namespace std; class Baum{ public: struct Knoten{ Knoten*vater, *links, *rechts; double wert; explicit Knoten(const double&wert): vater(0), links(0), rechts(0), wert(wert) {} }; Knoten*wurzel; }
-
1.) Wofuer soll
using namespace stdnoetig sein?
2.) Kardinalsfehler:usingin Headerdateien. Bitte nicht!
-
Das ist der Header? Da fehlt ein Semikolon am Ende der Klassendefinition. Und eine using-Direktive im Header ist eine schlechte Idee.
-
Das Problem ist er erkennt das struct Knoten nicht in der .cpp. Wieso nicht?
-
tanja.hopfer schrieb:
Das Problem ist er erkennt das struct Knoten nicht in der .cpp. Wieso nicht?
Okay. poste Bitte den kompletten Code + Fehlermeldung (copy + paste) und den verwendeten Kompiler. Nutze dazu vielleicht http://ideone.com/ .
-
tanja.hopfer schrieb:
Das Problem ist er erkennt das struct Knoten nicht in der .cpp.
Ist das die Fehlermeldung des Compilers? "Er erkennt das struct Knoten nicht"? Im Ernst, wenn du gut darin wärst, Compilerfehlermeldungen zu deuten, müsstest du nicht hier fragen. Darum zeig uns die echte Fehlermeldung, nicht deine Interpretation.
tanja.hopfer schrieb:
Wieso nicht?
Ich weiß nicht, warum das bei dir nicht ankommt: Solange du keinen Code zeigt, der das Problem reproduziert, kann man da nur raten.
-
Hab den Fehler gemacht das struct in der Klasse zu definieren. Es muss ausserhalb sein. Weiss selber nicht warum. Sorry nochmal.