struct in Headerdatei
-
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.
-
tanja.hopfer schrieb:
Es muss ausserhalb sein. Weiss selber nicht warum.
Du hast das Problem weder verstanden noch behoben. Du hast rumgefrickelt, bis es zufällig ging.
Willst du es verstehen, oder reicht es dir, wenn es läuft?
-
MFK schrieb:
tanja.hopfer schrieb:
Es muss ausserhalb sein. Weiss selber nicht warum.
Du hast das Problem weder verstanden noch behoben. Du hast rumgefrickelt, bis es zufällig ging.
Willst du es verstehen, oder reicht es dir, wenn es läuft?
tanja.hopfer schrieb:
Hab den Fehler gemacht das struct in der Klasse zu definieren. Es muss ausserhalb sein. Weiss selber nicht warum. Sorry nochmal.
Schön das ihr alle meine Kommentare überlest! Ich hab das doch die ganze Zeit gesagt???
-
Hör doch endlich Mal auf hier Fragen zu stellen, aber nicht auf das zu hören, was man Dir sagt (ja, habe auch gelesen, dass da jetzt irgendwas angeblich klappt; die Frage ist nur, wie lange)
poste Bitte den kompletten Code + Fehlermeldung (copy + paste) und den verwendeten Kompiler.
tanja.hopfer schrieb:
Hab den Fehler gemacht das struct in der Klasse zu definieren. Es muss ausserhalb sein. Weiss selber nicht warum. Sorry nochmal.
Das sorry ist berechtigt, aber nicht weil Du einen Fehler gemacht hast, sondern weil Du folgendes einfache Procedere nicht befolgst:
- Frage stellen (tust Du) und dabei einen vollständigen Code posten (tust Du nicht, Dein Anfangscode fängt mit public an -> unbrauchbar)
- Antworten lesen (bin nicht sicher, ob Du das tust)
- Aufforderungen befolgen, damit man Dir helfen kann (tust Du fast nie, Du schreibst einfach wieder irgendeine unbrauchbare Aussage wie "klappt nicht")
Befolge bitte Punkt 3. Wenn jemand was will, gib es ihm. Wenn Du es gerade nicht hast: Dann antworte nicht, bis Du es hast. (und wenn Du nicht weißt, was derjenige will, dann frag nach, aber ignoriere es nicht).
PS: Wenn Dir der Ton meiner Nachricht nicht passt, tut es mir Leid, aber da Du Normaldruck anscheinend ständig überliest dachte ich, dass etwas Fettdruck und Zahlen zur Auflistung Deine Aufmerksamkeit erregen könnten, die vielleicht sogar so weit führt, dass Du liest.

-
Das struct muss nicht außerhalb der Klasse liegen.
Wenn das struct NUR innerhalb der Klasse gebraucht wird, macht es sogar Sinn, das struct innerhalb der Klasse zu definieren.Wenn du wirklich ein Interesse daran hast, zu verstehen warum etwas funktioniert oder warum es nicht funktioniert, dann liefer doch bitte das gewünschte Minimalbeispiel und die passende Compilermeldung und dann lass dir doch einfach helfen. Nur so lernst du wirklich etwas.
-
Ja Enno hatte es schon gesagt. Lieben Dank euch allen nochmal.

-
Sorry Enno, vor die Klasse muss so eine Definition nicht. Vor allem nicht wenn sie zur Klasse gehört.
Das Ding ist nur, dass der Zugriff darauf dann adners vonstatten geht:
// Header.h struct Fubar { double x; double y; }; class Foo { struct Bar { int x; int y; }; Bar m_b; Fubar m_f; public: Bar getB() const; Fubar getF() const; }; // Implement.cpp #include "Header.h" Foo::Bar Foo::getB() const { return this->m_b; } Fubar Foo::getF() const { return this->m_f; }Und das meinen Eisflamme und die anderen auch mit verstehen wollen.
Klar es geht beides, funktionieren tun auch beliebig tiefere Verschachtelungen, aber sie hat es offensichtlich nur durch probieren/experimentieren zum Laufen gebracht.
-
Enno schrieb:
structs schreibt man in die Header also .h vor die Klasse.
Schwachsinn. Die können vor die Klasse, hinter die Klasse, oder auch in die Klasse rein.