Problem bei auslagerung von Klassen in Header



  • hi,

    ich habe versucht einen Code ,in dem die Klassen in der main.cpp waren auszulagern in header Dateien. Dabei ist wohl etwas schief gegangen. Naja seht selbst:

    main.cpp:

    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include "Person.h"
    #include "Konto.h"
    
    using namespace std;
    
    // -- Programm --
    int main(int argc, char *argv[])
    { 
        // neue person
        Person helge("Helge","Maus");
    
        // Neues Konto
        Konto kto( helge, 11.73 );
    
        cout << "Kontostand: " << kto.getKontostand() << endl;
        cout << "Inhaber: " << kto.inhaber.getName() << endl;
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    Person.h

    #include <string>
    
    using namespace std;
    
    class Person
    {
          // Eigenschaften
          string vorname;
          string name;
    
          // Methoden
          public:
                 Person(string vorname, string name);
    
                 void setName(string vorname, string name);
                 string getName();
    };
    

    Person.cpp:

    #include "Person.h"
    #include <string>
    
    using namespace std;
    
    Person::Person(string v, string n) :
                          // init
                          vorname( v ),
                          name( n )
    { }
    
    void Person::setName( string v, string n)
    {
        vorname = v; 
        name = n;
    }
    
    string Person::getName()
    {
           return vorname + " " + name;       
    }
    

    Konto.h:

    #include <string>
    
    using namespace std;
    
    // -- Klasse Konto --
    
    class Konto {
                // Eigenschaften      
                double stand;
    
                // Methoden
                public:
                       Person inhaber;
                       Konto( Person inh, double std );
                       void setKontostand( double std );
                       double getKontostand(); 
                       string getInhaber();
    };
    

    Konto.cpp

    #include <string>
    #include "Konto.h"
    #include "Person.h"
    
    using namespace std;
    
    Konto::Konto( Person inh, double std ) :
                  // init
                  inhaber( inh ),
                  stand (std )
    {}
    
    void Konto::setKontostand(double std )
    {
      stand = std;                                                    
    }
    
    double Konto::getKontostand()
    {
           return stand;
    }
    

    Fehlermeldungen:
    1.\konto.h(13) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'inhaber'

    2.\konto.h(13) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.

    3.\konto.h(13) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    4.\konto.h(14) : error C2061: Syntaxfehler: Bezeichner 'Person'
    5.\konto.cpp(7) : error C2511: 'Konto::Konto(Person,double)': Überladene Memberfunktion nicht in 'Konto' gefunden
    6.\konto.h(7): Siehe Deklaration von 'Konto'
    7.\konto.cpp(22) : fatal error C1004: Unerwartetes Dateiende gefunden.

    Falls euch sonst noch was auffällt oder ihr andere Tipps habt, könnt ihr diese gerne einbringen.

    gruß


  • Administrator

    1. Du brauchst Header Guards. Wenn du keine Header Guards machst, wird die Lösung, welche ich dir gleich sage, weitere Fehler bringen.
    2. In Konto.h muss ein #include "Person.h" rein, damit dort die Person bekannt ist.

    Header Guard:
    http://en.wikipedia.org/wiki/Header_guard

    Grüssli



  • Vielen Dank funktioniert jetzt alles. 😃


Anmelden zum Antworten