Abgeleitete Klasse gibt als "Name" fälschlicherweise nicht aus



  • Ja. Die Funktion soll halt die Namen der geerbten Klasse ausgeben. Ich dachte, wenn man eine Klasse erbt, erbt man die Funktionen so mit, wie sie sind.

    Heißt, dass die auch den Namen, der geerbten Klasse ausgeben.

    Habe jetzt mal getestet, den Geerbten Klassen die Funtkionen zu überschreiben, bekomme aber einen Linking-Fehler(Der verherige Kommentar von mir wurde mit den Zitaten der Fehler "erweitert".

    Edit: Jetzt geht es, aber halt mir dem überschreiben.

    Den Fehler habe ich wegbekommen, indem ich die Funktionen Hauptklasse(oder heißt es Parentclass?) "weapon" als virtual .... = 0; gesetzt habe. Hatte das "= 0;" vergessen.



  • Du musst in deinen abgeleiteten Klassen _name initialisieren und nicht neu definieren. Wenn du _name aus der Basisklasse initialisierst wird dir auch der name mit deiner Funktion ausgegeben.

    Am besten deklarierst du _name innerhalb deiner Basisklasse als protected .

    PS: Der Linkerfehler kommt daher das du eine Funktionsdefinition gemacht hast ohne dieser einen Funktionsrumpf zu geben.



  • string Name und int Dmg sind ja in der Hauptklasse drin, aber wenn ich dann Name = "" in der abg. Klasse schreibe, zeigt er mir nen Fehler an, dass ich doch bitte eine Variablenart davorschreiben möchte.
    😕



  • Megani schrieb:

    Ja. Die Funktion soll halt die Namen der geerbten Klasse ausgeben.

    Dann solltest du den Namen auch setzen und nicht einen weiteren erfinden.

    Ich dachte, wenn man eine Klasse erbt, erbt man die Funktionen so mit, wie sie sind.

    Wo ist der Widerspruch?



  • Ich glaube, ich bin einfach noch nicht so gut in C++... Das mit Protected hat mich gerade daran erinnert, dass ja Variablen, die in der Hauptklasse private sind, nicht von geerbten Klassen mitgeerbt werden..

    Wie kann ich diese jetzt aber in den geerbt. Klassen auf private setzten?

    Muss ich einfach

    class weapon_xx : private weapon
    

    schreiben?



  • Megani schrieb:

    string Name und int Dmg sind ja in der Hauptklasse drin, aber wenn ich dann Name = "" in der abg. Klasse schreibe, zeigt er mir nen Fehler an, dass ich doch bitte eine Variablenart davorschreiben möchte.
    😕

    Ist das der einzige Weg, einer Variablen bei der Objektkonstruktion einen Wert zu geben?



  • Sonst fällt mir nurnoch der Konstruktor ein.



  • Megani schrieb:

    Das mit Protected hat mich gerade daran erinnert, dass ja Variablen, die in der Hauptklasse private sind, nicht von geerbten Klassen mitgeerbt werden..

    Das ist falsch.



  • Megani schrieb:

    Sonst fällt mir nurnoch der Konstruktor ein.

    Warum nur noch? Was ist falsch an einem Konstruktor?



  • Ich mag den nicht wirklich.

    Weil ich da noch nicht genau weiß, wie ich den Konstruktor schreiben soll.

    Ob ich den miterbe oder ob ich den neuschreibe. Wie ich den schreibe und wie ich vorallem den Dekonstr. schreibe.

    ich weiß auch nicht, wie man ein Obj., dass man mit new erstellt hat, wieder löschen kann und den Pointer weiter nutzen kann um z.B. eine andere geerbte Klasse darin zu speichern. Mit delete und delete[] bekomme ich immer Fehler.



  • Dann solltest du nicht mit Entwurfsmustern spielen sondern die Grundlagen lernen.



  • manni66 schrieb:

    Dann solltest du nicht mit Entwurfsmustern spielen sondern die Grundlagen lernen.

    Was ich gerade mit diesem Projekt tuhe.

    Edit: Es geht jetzt.


Anmelden zum Antworten