Vererbung (Fehlermeldung)
-
nein du musst in der CSpielerklasse per initailisierungsliste den konstruktor von CCharacter aufrufen
CSpieler::CSpieler() : CCharacter("lol") { // ... }
-
Das liegt daran, dass du angibst, dass du einen eigenen Destruktor hast, diesen aber nirgends definierst.
-
Nach dem löschen des Destruktors ging es

Alles klar Problem ist damit gelöst, danke für die Antworten

-
Obwohl ein Problem gibt es doch noch zum Thema Vererbung.
Klasse main.cpp
CSpieler spieler(); spieler.print(); return 0;Durch die Vererbung sollte es doch jetzt möglich sein, die print()-Methode aus der Klasse CCharacter aufzurufen
Nur leider schmeisst mein Compiler hier ein Fehler:-> error: request for member print in spieler which is of non-class type CSPieler()
Muss ich die print Methode jetzt überschreiben? Dann hätte doch die Vererbung hier garkeinen Sinn^^ Da ich ja (bis jetzt zumindest) noch keine anderen EIgenschaften habe die ich ausgeben möchte?
-
CSpieler spieler();Das ist eine Funktionsdeklaration.
-
Mh ja stimmt aber selbst wenn ich es so mache, meldet mein compiler den selben Fehler:
CCharacter *pSpieler; pSpieler = new CSpieler; pSpieler.print(); return 0;
-
Bestimmt nicht den selben, aber einen ähnlichen. Hier hast du kein Objekt, sondern einen Zeiger, den du erstmal dereferenzieren mußt (per
(*pSpieler).print();oderpSpieler->print();).Aber was hindert dich daran, einfach eine lokale Variable anzulegen?
CSpieler spieler; spieler.print(); return 0;
-
Nichts oO
lol Ja doch jetzt geht es mitCSpieler spieler;
spieler.print();Hab wohl zu lange mit Java programmert ohne was mit Cpp zwischendurch zu machen xD
Denn ich muss bzw. kann ja auch CCharacter so initialisieren:CCharacter character("Name"); character.print();Nun dacht ich, wenn ich ein Objekt erzeuge ohne Patrameter muss zumindest die leere Angabe dabeistehen:
CCharacter character(); ...Bin es nämlich so gewohnt (von Java her):
CCharacter character = new CCharacter();
-
Und wenn Du new benutzt, ist das auch in Ordnung. Wenn Du es nicht benutzt, aber eben nicht.
-
So. Hoffe das ist jetzt alles so richtig^^ Wollte nur nochmal fragen ob das so "richtiger" Code ist^^ bzw. ob man das auch wirklich so schreiben würde^^ Gibt ja immer schönen und nicht so schönen Code^^
CCharacter.h:
// Konstruktoren CCharacter(); CCharacter(string name);CSpieler.h, erbt von CCharacter
CSpieler(); CSpieler(string name)CCharacter.cpp
CCharacter::CCharacter() {} CCharacter::CCharacter(string name) { setName(name); set... }CSpieler.cpp
CSpieler::CSpieler() {} CSpieler::CSpieler(string name) : CCharacter(name) { }Brauche ich die leeren (standart?) Konstruktoren jetzt überhaupt?^^ Oder kann ich die auch einfach weg lassen?

-
Prinzipiell ist es deine Entscheidung, ob du einen namenlosen Charakter bzw. Spieler zulassen willst. Wenn du sicher gehen willst, daß neue Figuren nur mit Name erzeugt werden können, lässt du sie weg.