Fehlersuche



  • bei mir klappt in Sachen Vererbung etwas nicht, hoffe jemand von euch weis an was es liegt.

    1. Das Programm

    //-------------------------------------------------------------------- -------
    #include <condefs.h>
    #include <iostream.h>
    #include <iomanip.h>
    #include <conio.h>
    #include "H:\Ct\C++ 13\Objektorientiert\Korrentkonten\Korrentkonto.h"
    //-------------------------------------------------------------------- -------
    
    USEUNIT("Korrentkonto1.cpp");
    //-------------------------------------------------------------------- -------
    int main()
    {
    
    Sparkonto Sparkonto1(2.0, 1, "ICH", 0.0);
    }
    

    2. Die Unit

    /-------------------------------------------------------------------- -------
    #include "iostream.h"
    #include "H:\Ct\C++ 13\Objektorientiert\Sparkonto_Kontok\Korrentkonten.h"
    
    //---------------------- Basisklasse Bankkonten ----------------------------
    
    Bankkonto :: Bankkonto(int NR, string Inh, double Kst)
    {
            Nummer          =  NR;
            Kontoinhaber    = Inh;
            Kontostand      = Kst;
    
    }
    
    Bankkonto :: Bankkonto()
    {
    }
    
    Bankkonto :: ~Bankkonto()
    {
    }
    
    void Bankkonto :: Einzahlung(double diff)
    {
            Kontostand = Kontostand + diff;
    }
    
    double Bankkonto :: Kontostand_ausgeben(void)
    {
            cout << Kontostand;
    }
    
    //-------------------------------- Abgeleitete Klassen ------------------------
    
    //-------------------------------- Klasse Sparkonto ---------------------------
    
    Sparkonto :: Sparkonto(double Zi, int NR, string Inh, double Kst ):Bankkonto(NR,Inh,Kst) <<<---- HIER STIMMT WAS NICHT
    {
            Zins = Zi;
    }
    
    Sparkonto :: Sparkonto()
    {
    }
    
    Sparkonto :: ~Sparkonto()
    {
    }
    
    void Sparkonto :: Auszahlung(double Aus)
    {
            Kontostand = Kontostand - Aus;
            if(Kontostand < 0)
                    {
                            Kontostand = 0;
                            cout << "revoir de la plus";
                    }
    }
    
    void Sparkonto :: Zinsberechnung(void)
    {
            double Zinsen = Kontostand * Zins/100;
            Kontostand = Kontostand + Zinsen;
    }
    
    //-------------------------------------- ENDE Klasse Sparkonten ---------------
    
    //------------------------------ Klasse Kontokorrentkonto ---------------------
    
    Kontokorrentkonto :: Kontokorrentkonto(double Habenzins, double Sollzins, int NR, string Inh, double Kst) : Bankkonto(int NR, string Inh, double Kst)
    {
    }
    
    Kontokorrentkonto :: Kontokorrentkonto()
    {
    }
    
    Kontokorrentkonto :: ~Kontokorrentkonto()
    {
    }
    
    void Kontokorrentkonto :: Auszahlung(double Aus)
    {
                    Kontostand = Kontostand - Aus;
    }
    
    void Kontokorrentkonto :: Zinsberechnung(void)
    {
            if(Kontostand < 0)  // SOLL
            {
                    double Zinsen = Kontostand * Sollzins/100;
                    Kontostand = Kontostand - Zinsen;
            }
            else
            {
                    double Zinsen = Kontostand * Habenzins/100;
                    Kontostand = Kontostand + Zinsen;
            }
    }
    

    Und die Headerdatei

    //******* Headerdatei Korrentkonten.h
    #ifndef Korrentkonten_h
    #define Korrentkonten_h
    //********* Basisklasse Bankkonto ******************
     class Bankkonto
     {
      private:
            int    Nummer;
            string Kontoinhaber;
            double Kontostand;
    
      public:
            // Konstruktor
            Bankkonto(int, string, double);
            Bankkonto();
            // Destruktor
            ~Bankkonto();
            // Methoden
            void Einzahlung(double);
            double Kontostand_ausgeben();
    
     };
    
     //********* Abgeleitete Klassen **********************
    
      class Sparkonto : public Bankkonto
      {
       private:
           double Zins;
    
       public:
            // Konstruktor
            Sparkonto(double, int, string, double);
            Sparkonto();
            //Destruktor
            ~Sparkonto();
            // Methoden
            void Auszahlung(double);
            void Zinsberechnung(void);
      };
    
      class Kontokorrentkonto : public Bankkonto
      {
       private:
           double Habenzins;
           double Sollzins;
    
       public:
            void Auszahlung(double);
            void Zinsberechnung(void);
      };
    #endif
    

    Fehlermeldung

    [C++ Fehler] Korrentkonto1.cpp(39): E2316 'Sparkonto::{(double,int,string,double)' ist kein Element von 'Sparkonto'.
    

    Also irgendetwas wird generell nicht weiter vererbt, da sind auch noch duzente andere Fehlermeldungen, die da heißen

    [C++ Fehler] Korrentkonto1.cpp(65): E2247 Zugriff auf 'Bankkonto::Kontostand' nicht möglich.
    

    Is aber klar, denn es wurde ja auch kein Konto angelegt, doch warum?

    MfG



  • Fodoodo schrieb:

    'Sparkonto::{(double,int,string,double)' ist kein Element von 'Sparkonto'.

    Lass beim Aufruf des Basisklassenkonstruktors die Typen weg.

    Korrentkonto1.cpp(65): E2247 Zugriff auf 'Bankkonto::Kontostand' nicht möglich.

    Kontostand ist private. Dadurch haben abgeleitete Klassen keinen Zugriff.



  • muss das auch nicht:

    Sparkonto :: Sparkonto(double Zi, int NR, string Inh, double Kst ): Bankkonto::Bankkonto(NR,Inh,Kst)
    

    heißen?

    dann sollte es eigentlich klappen....


Anmelden zum Antworten