Problem mit Deklaration bei C++
-
Hallo,
vielen Dank schonmal, aber das hatte ich auch versucht und da kommt folgender Fehler:
In file included from main.cpp:3:0:
auftrag.h:24:12: error: declaration of ‘Kunde* Auftrag::Kunde’
kunde.h:13:13: error: changes meaning of ‘Kunde’ from ‘class Kunde’
-
Kunde* Kunde;Du deklarierst ein Object Kunde mit Typ Zeiger auf Kunde - doppelte Bedeutung des Bezeichners "Kunde". Nenn das Objekt einfach anders.
-
Super, vielen Dank

-
Was für ein grässliches Denglisch.
-
Ich hab noch ein weites Problem und zwar baue ich gerade die Methode "print" von Kunde:
void Kunde::print() { cout << "Kunde: " << name << endl << "Auftraege: "; for(int i = 0; i < vMyAuftr.size(); i++) cout << (*(vMyAuftr.at(i))).getID() << " "; }Da bekomm ich folgenden Fehler:
kunde.h:46:36: error: invalid use of incomplete type ‘struct Auftrag’
kunde.h:7:7: error: forward declaration of ‘struct Auftrag’
-
In der Implementierung reicht die Vorwärtsdeklaration nicht mehr. Da musst du dann wirklich die auftrag.h einbinden.
-
Klar, in kunde.h hast du (wg. Vermeidung zyklischer Einbindung der Header) nur eine Forward Declaration. Um "Auftrag" verwenden zu können, brauchst du aber die Definition der Klasse, die du erst mit dem include bekommst.
Um nicht wieder in zyklisches einbinden zu laufen, legst du eine Datei "kunde.cpp" an, in die du die Definition von Kunde::print() vornimmst. Dort kannst du gefahrlos kunde.h und auftrag.h einbinden.@SeppJ: er implementiert gerade in kunde.h (laut Fehlermeldung)
-
Evtl. könnte man bei den Funktions(deklarationen)auch besser Referenzen statt Zeiger verwenden?
-
redrew99 schrieb:
Evtl. könnte man bei den Funktions(deklarationen)auch besser Referenzen statt Zeiger verwenden?
Evtl. könnte man bei den Funktions(deklarationen)auch besser die Zeiger lassen?
-
mal ganz ehrlich: referenzen in klassen verwenden? das hab ich nie gebraucht bis jetzt, ist auch recht unflexibel aus meiner sicht. klar es gibt sicherlich das ein oder andere anwendungsgebiet, aber da gibts bessere alternativen.
und zum zeiger: da gibts wahrlich bessere alternativen in diesem fall, und sei es nur ein smart pointer aus der STL. aber am besten ist immer noch, gar kein zeiger
-
Er meinte sicherlich bei
void setKunde(Kunde* k);mit dem Gebetsmühlenargument, da der Kunde nicht 0 sein darf, müsse man das so per Referenz anzeigen.
void setKunde(Kunde& k);Anderenfalls müsse man im Code von setKunde gegen 0 prüfen.
Das ist jedesmal falsch, wenn dieses Argument kommt.Und diesmal besonders
bla.setKunde(*new Kunde(...));:xmas2: :xmas2:
-
oh mist, kann auch sein. hab mir den quellcode nicht aufmerksam angeguckt -.-'