Klassen und Objekte: Beispielaufgabe



  • Hallo. Ich habe dieser Seite http://www.highscore.de/cpp/aufbau/index.html die Beispielaufgabe ausprobiert, aber der CMD-Editor öffnet sich nicht. Mein Problem dabei ist, dass die nachfolgenden Aufgaben nur Erweiterungen dieser Aufgabe sind. Nun meine Frage:
    Warum öffnet sich der CMD-Editor bei folgendem Code nicht:

    Klasse Bank wird definiert:

    #include <string> 
    
    class bank 
    { 
      public: 
        void init(std::string benutzername, std::string pin, int kontostand); 
        bool zugriff_ueberpruefen(std::string benutzername, std::string pin); 
        bool geld_abheben(int betrag); 
    
      private: 
        std::string Benutzername; 
        std::string PIN; 
        int Kontostand; 
    };
    

    Klasse Kunde wird definiert:

    #include <string> 
    
    class kunde 
    { 
      public: 
        void geldkarte_einschieben(); 
        bool PIN_eingeben(); 
        bool betrag_waehlen(); 
    
      private: 
        std::string Benutzername; 
        std::string PIN; 
    };
    

    Wird in Quellcode über #include eingefügt:

    #include "kunde.h" 
    #include "bank.h" 
    #include <iostream> 
    
    extern bank b; 
    
    int main() 
    { 
      kunde k; 
    
      b.init("boris", "1234", 1000); 
    
      for (;;) 
      { 
        k.geldkarte_einschieben(); 
    
        if (k.PIN_eingeben() == true) 
        { 
          if (k.betrag_waehlen() == true) 
          { 
            std::cout << "Der gewuenschte Betrag wurde abgehoben." << std::endl; 
          } 
        } 
        else 
        { 
          std::cout << "Die PIN ist falsch." << std::endl; 
        } 
      } 
    
    }
    

    Grüße
    silent12


  • Mod

    silent12 schrieb:

    aber der CMD-Editor öffnet sich nicht.

    Was meinst du damit?

    Das Programm sollte so erst einmal nicht linken, da die Definition von b fehlt.



  • Ich vermute mal, dass er sich öffnet und sofort wieder schließt.

    Füg mal unten hinzu:

    std::cin.peek();
    


  • Er öffnet sich gar nicht erst. Habe schon system("Pause"); drangehängt.



  • Klappt das kompilieren/linken denn ohne Fehlermeldung?



  • Ja



  • Welche IDE verwendest du?
    Was passiert, wenn du auf die erste zeile in main einen breakpoint setzt?



  • ? Sry bin noch völliger Anfänger und weiß nicht was du meinst



  • silent12 schrieb:

    Ja

    Dann muss da aber mehr sein, als Du uns hier zeigst, es fehlt die Definition der Variablen b, wie schon jemand angemerkt hat, außerdem fehlen die Methodendefinitionen der Klassen bank und kunde ...

    Das hier gezeigte kann so nicht gelinkt werden.



  • silent12 schrieb:

    ? Sry bin noch völliger Anfänger und weiß nicht was du meinst

    1. Welches Programm setzt du ein, um den Code einzugeben und auszuführen?
    2. Man kann Programme mittels einem Debugger in Einzelschritten ausführen, und sogenannte "Breakpoints" setzen um den Code an der entsprechenden Stelle anzuhalten.

    Die Verwendung eines Debuggers ist für die Programmierung ungefähr so wichtig wie für ein Auto der Motor. Er hilft wesentlich dabei Fehler zu finden.



  • Erstellt denn das Teil eine ausführbare Datei (exe unter Windows)? Falls ja, kannst Du diese durch Doppelklick ausführen und zum Ergebnis kommen? Oder wird auch diese nicht erzeugt?



  • Ich benutze DevC++. Meldet nicht der Debugger immer wo der Fehler ist wenn einer gefunden wird ? Wenn ja dann passiert das bei mir automatisch. Außerdem: warum sollte der Debugger einen Fehler anzeigen, da er ja auch beim kompletten Code keinen Fehler anzeigt



  • Warum man Dev C++ nicht mehr verwenden sollte: http://www.c-plusplus.net/forum/237002



  • Du hast vermutlich den Unterschied zwischen Debugger und Compiler noch nicht verstanden. Der Debugger Compiler läuft einmal über den Code und überprüft, ob der den Syntaxregeln von C++ entspricht (manche kennen noch einige typische Probleme, bei denen sie dann Warnungen ausgeben können), mit dem Debugger kannst u as fertige Programm beim Laufen beobachten.

    PS: Un nicht alles, was fehlerfrei kompiliert wird, ist auch technisch einwandfrei.



  • Und bei "einmal über den Code laufen" meintest du den Compiler 😉



  • silent12 schrieb:

    Ich benutze DevC++.

    Mehr als nur veraltet.

    silent12 schrieb:

    Meldet nicht der Debugger immer wo der Fehler ist wenn einer gefunden wird ?

    Nein. Der Debugger ist etwas, das man aktiv verwendet. Der Compiler kann im wesentlichen nur syntaktische Fehler finden, den Debugger verwendet man um konkret zur Laufzeit Variableninhalte auslesen zu können, in Einzelschritt Funktionen zu durchlaufen etc.

    Die meisten Fehler sind die, die der Compiler nicht finden kann. Viel häufiger sind logische Fehler etc. die man besser mit einem Debugger aufspürt.

    silent12 schrieb:

    Außerdem: warum sollte der Debugger einen Fehler anzeigen, da er ja auch beim kompletten Code keinen Fehler anzeigt

    Der Code den du gepostet hast enthält Fehler bzw. ist unvollständig.



  • Ah ok danke für die Antworten. Ja und was fehlt an diesem Code ? Ich habe diesen ja nicht selber geschrieben sondern von einem Tutorial mit dem ich gerade arbeite.


  • Mod

    CStoll schrieb:

    Du hast vermutlich den Unterschied zwischen Debugger und Compiler noch nicht verstanden. Der Debugger läuft einmal über den Code und überprüft, ob der den Syntaxregeln von C++ entspricht (manche kennen noch einige typische Probleme, bei denen sie dann Warnungen ausgeben können), mit dem Debugger kannst u as fertige Programm beim Laufen beobachten.

    Jetzt hast du es selber verdreht 😃 .

    An die Mitleser: Das erste Debugger muss Compiler heißen.


  • Mod

    silent12 schrieb:

    Ah ok danke für die Antworten. Ja und was fehlt an diesem Code ?

    SeppJ schrieb:

    Das Programm sollte so erst einmal nicht linken, da die Definition von b fehlt.



  • silent12 schrieb:

    Ja und was fehlt an diesem Code ?

    Du hast Header (in der Regel .h/.hpp), aber nicht die Sourcedateien (in der Regel .cpp) angegeben. Der Code deutet zudem auch schon das an, was für viele Tutorials gilt: das sie nicht wirklich gut sind. Ohne die Definition (sprich: was machen die Methoden) zu sehen, fallen mir sofort einige Mankos an dem Code auf, und da sind fehlende Headerguards, Initmethoden statt Konstruktoren, Unnötige Kopien etc. nur eine kleine Auswahl.

    silent12 schrieb:

    Ich habe diesen ja nicht selber geschrieben sondern von einem Tutorial mit dem ich gerade arbeite.

    Wenn du C++ lernen willst, solltest du ein gutes C++ Buch verwenden. Es gibt zwar leider sehr viele Schlechte, doch übliche Empfehlungen sind z.B. der "C++ Primer", "Thinking in C++" und das Vermeiden von Büchern aus dem Galileo Verlag usw...


Log in to reply