Methoden und Klassen



  • Bin noch ziemlich frisch am C++ lernen und habe gerade überhaupt keine Ahnung, was ich hier falsch habe:

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    class raten
    {
          public:
          int begin;
          int endza;
          int zufall;
    }
    
    int raten::generieren()
    {
        begin = 0;
        cout << "Eingabe der grösste Zahl: ";
        cin >> endza;
        return 0;
    }
    
    int main() 
    {
        int spieler;
    
        cout << "Spieleranzahl: ";
        cin >> spieler;
        system("PAUSE");
        return 0;
    }
    

    😕
    Es zeigt immer einen Fehler bei der geschwungene Klammer bei generieren an.
    Wenn ich "generieren" in die Klasse "raten" einfüge gehts auch nicht. Sollte ein kleines Zahlenraten werden



  • #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    class raten  // <-- Klassendefinition
    {
    public:
          int begin;
          int endza;
          int zufall;
    } // <-- Semikolon fehlt
    
    int raten::generieren() // Klasse raten hat keine Methode generieren(), siehe Klassendefinition
    {
        begin = 0;
        cout << "Eingabe der grösste Zahl: ";
        cin >> endza;
        return 0;
    }
    

    Richtig:

    class raten  // <-- Klassendefinition
    {
    public:
          int begin;
          int endza;
          int zufall;
          int generieren(); // Deklaration der Methode
    } ;
    
    int raten::generieren() // Definition der Methode
    {
    ...
    }
    

    Alternativ:

    class raten
    {
    public:
          int begin;
          int endza;
          int zufall;
          int generieren()
          {
            ....
          }
    } ;
    


  • An die Semikolon habe nicht gedacht...
    Danke für die schnelle Antwort, jetzt gehts!



  • Also in die Header Datei gehört die Klassen Definition:

    Klasse.h

    #ifndef _KLASSE_H_
    #define _KLASSE_H_
    class _Klasse
    {
        private:
            void Funktion();
    };
    #endif
    

    Und die Deklaration der Klasse in die cpp Datei:

    Klasse.cpp

    #include "Klasse.h"
    
    void _Klasse::Funktion()
    {
        return;
    }
    


  • Bezeichner, die mit Unterstrich anfangen oder zwei aufeinanderfolgende Unterstriche beinhalten sollten vermieden werden. Viele von denen sind reserviert. Diese "Namensräume" sind der Standardbibliothek / der Implementierung vorbehalten.



  • @IEFMC, du verwirrst mich gerade ein wenig...

    #ifndef _KLASSE_H_
    #define _KLASSE_H_
    

    Muss das vorhanden sein? Bei mir läuft es auch ohne ganz gut...
    Ich muss die Klasse ja nicht includen, ist also in der selben Datei wie die Mainmethode

    Bei mir wird die Klasse jetz so erstellt:

    raten r;
        r.generieren();
    


  • wenn es sich alles in der Main befindet, ist es nicht unbedingt notwendig.
    Aber du solltest dir frühzeitig angewöhnen, für jede Klasse eine Header und eine Definitionsdatei zu erstellen. Das macht es auch viel übersichtlicher.



  • #ifndef _KLASSE_H_

    Include Guards, ja, aber bitte nicht mit reservierten Namen.
    #ifndef KLASSE_H tut's doch auch, oder?

    ...


Anmelden zum Antworten