Probleme mit Vererbung



  • Nabend

    Hoffe ich stelle das hier jetzt ins richtige Forum.
    So zu meinem Problem muss ich erstmal was erklären.

    Das ist ein Schulprojekt. Es geht dabei darum die Vererbung zu benutzen.
    Es gibt eine Welt und in der werden Schafe geboren,sterben usw...
    Im Programm gibt es männliche und weibliche Schafe die von einer Klasse Schafe abgeleitet sind.
    Das Programm ist so gesehen auch schon geschrieben. Leider kann ich nicht testen ob es richtig funktioniert weil ich immer eine bestimmten Fehler bekomme.
    Der kommt bei allen Funktionen die ich ansprechen will die in den Klassen male.cpp und female.cpp stehen...Hier mal ein Beispiel:
    chain_01.cpp(66, 39): 'iGetSchwanger' is not a member of 'SCHAF'
    Wenn ich F1 drücke bekomme ich Folgende Erklärung dazu

    (Bezeichner gehört nicht zu struct)
    Sie versuchen fälschlicherweise, einen Bezeichner als Element einer Struktur zu behandeln.
    Überprüfen Sie Ihre Deklarationen.

    Und das passiert bei fast allen Funktionen ausser wenn ich eben funktionen aus der SCHAF Klasse aufrufe.
    Den Fehler eingegrenzt hab ich ja schonmal das irgendwo was beim struct falsch ist, aber ich weiß nicht wie ich den beheben soll....hier mal ein bissel Code damit man sich das besser vorstellen kann

    //female.cpp
    int SCHAF_F::iGetSchwanger()
        {
            return(iSchwanger);
        }
    //...
    //chain.h
    typedef struct tagliste
    {
        SCHAF* Schaf;
       struct tagliste* ptNext;
    }
    liste;
    //Hier wird ein männliches SChaf erstellt
    ptNeu->Schaf=new SCHAF_M(iBlumenStart,iGroesse);
    
    //Aufruf in chain_01.cpp
    if(ptTemp->Schaf->iGetSchwanger()==1)
    

    Weiß ja nicht was ihr noch so braucht. Ich hab das ganze Projekt einfach mal hochgeladen.
    Gibts hier
    http://martin-heydecke.de/files/Simu_051103.rar
    Da fehlen zwar noch ein paar funktionen usw., aber ich will ja nur erstmal diesen einen Fehler weg bekommen damit ich weiterarbeiten kann.
    Wär echt toll wenn mir jemand helfen könnte. Ist wirklich sehr dringend.
    Danke schonmal im Voraus

    mfg Kami



  • Kamikaze schrieb:

    Und das passiert bei fast allen Funktionen ausser wenn ich eben funktionen aus der SCHAF Klasse aufrufe.

    Weil in deiner Liste nur SCHAFe sind, keine SCHAF_F.



  • Kannst du mir das erklären? Ich verstehs einfach nicht.
    Ich weise der Liste doch mit
    ptNeu->Schaf = new SCHAF_M...oder SCHAF_F ein neues männliches, bzw.weibliches Schaf zu.



  • Das Problem ist, dass du einerseits die Polymorphie deiner Liste nutzen willst und andererseits spezifisch weibliche Methoden nicht in der Oberklasse(Vaterklasse) implementiert hast.
    In dem Fall handelt es sich um die Methode iGetSchwanger(). Das Problem ist, dass iGetSchwanger() nicht in der Oberklasse definiert ist. Und er somit die Methode nicht aufrufen kann, weil in deiner Liste "SCHAF"e zugelassen sind und auf die Methoden dieser Oberklasse zurückgegriffen wird.
    Eine Lösung wäre die, dass du in der Oberklasse "SCHAF" die Methode iGetSchwanger() als virtuell definierst und erstmal 0 zurückgeben lässt.

    class SCHAF
    {
      public:
        virtual int iGetSchwanger(){return 0;};
    };
    
    class SCHAF_W : public SCHAF
    {
      public:
        int iGetSchwanger(){return iKinder;};
    };
    

Anmelden zum Antworten