Aufgabe 1a
Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
dynamic_cast
Hey, ich hab jetzt den Code für die Aufgabe 1a soweit fertig, aber der Compiler mag ihn noch nicht so recht. Ich hab halt beim Tanken die Typprüfung des Kraftstoff *k mit dem dynamic_cast gemacht, wie es auf unseren Folien steht. Das kommt dabei raus:
|“motorrad.cpp: In method bool Motorrad::tanken(Kraftstoff *)': motorrad.cpp:38: cannot dynamic_cast
k’ (of type class Kraftstoff *') to type
class Benzin *'”|
Woran liegt das jetzt schon wieder?
Hier relevante Codestellen:
motorrad.cpp
bool Motorrad::tanken(Kraftstoff *k)
{
if (dynamic_cast<Benzin*>(k) == NULL) return false;
benzin.hpp
class Benzin : public Kraftstoff
hoi
das problem hatte ich auch … liegt daran das du unter der kraftstoff klasse keine virtuelle funktion hast, was dynamic_cast braucht…
einfach
virtual void bla(void){};
in die kraftstoffklasse einfügen dann funkts (bei mir zumindestens)
Drager
oder nen virtuellen destruktor
OK, danke. Hat geholfen. Stand ja mittlerweile in der NG auch, hab ich gesehen.
Mann, die Fehlersuche beim Compilieren kann vielleicht nervig sein!!!
Wo wir schon dabei sind: was hat denn die Tilde~ zu bedeuten? Das hab ich in der Übung net ganz kapiert! Hat das auch was mit dem virtuell zu tun?
die tilde markiert den destruktor.
man glaubt gar nicht wie viele fehler in einem programm stecken können … :rolleyes: ich hab bestimmt 20 verschiedene fehler ausbügeln müssen … das frühe anfangen hat sich schon gelohnt, ich glaub wenn ich nächsten MO anfangen würde, würde ich glaub ich ziemlich panisch werden … ich freu mich schon auf templates
hätte da gleich auch mal ne frage,
habe bool bla::blabla(){cout<<lalalla<<,return true;} geschrieben jetzt kommt immer der fehler syntax error before’::’ token…wasn daran falsch versteh den fehler nich. hat von euch wer ne ahnung?
steht die methode innerhalb der klasse? dann brauchst du diesen scope operator nämlich nicht … ja und es muss natürlich ne klasse bla geben …
Scheint so, als würde er bla nicht als Klasse kennen. Hast du den Header mit der Klassen deklaration included?
japp hab ich alles gemacht…liegt anscheinend am prog das ich mir runtergeladen hab ich probiers mal mit nem anderen aber thx
syntax error before :: bedeutet meist, dass er das vor dem :: nicht kennt. fehlen vllt includes von header-dateien?
Sag ich doch ;).
Ich hab den in keiner klasse! Ist das OK?
Und brauch ich dem sein Gegenstueck denn eigentlich in jeder Klasse? In der Klasse fahrzeug wird ja nix gemacht beim erstellen der Klasse. Die abgeleiteten Klassen brauchen evtl ja keinen. (Also mir ist schon klar dass wenn ein kfz erstellt wird der tank voll sein muss).
[Hat das jetzt jemand verstanden ?]
muss ich eigentlich auch die header von superklassen includen oda funzt das wie java ???
Es gibt einen Satz von methoden, die c++ automatisch generiert, wenn sie nicht deklariert werden. Dazu zählen der default konstruktor und auch ein destruktor. Du kannst einen Destruktor also weglassen, es wird ein leerer generiert.
Wenn es um vererbung geht, ist ein virtueller Destruktor ganz gut, auch wenn er leer ist.
ne … wenn du einen header inkludierst, der bereits selbst die richtigen header inkludiert, so werden die natürlich gleich mitinkludiert … jedenfalls hab ich’s so verstanden und es funktioniert auch so
hm… ich weiss net wie du das etz meinst, aber ich hab in jeden header einer klasse den haeder der superklasse inkludiert. klingt find ich auch vernünftig, da er ja sonst evtl net die superklasse kennt, denn c++ schaut bestimmt net nach den files!!!
und etz spuckt mir der compiler solch tolle statements aus, wie dass kfz zweimal deklariert wird, sprich: natürlich einmal von benzin und einmal von dieselauto.
erkennt denn der compiler nicht wenn er zweimal das selbe inkludiert???
siehe newsgroup / slrnc8vehb.hk.gp@bork.informatik.uni-erlangen.de