C++ Anfänger



  • Hallo,
    Ich habe ganz frisch mit c(pp) angefangen und bin mir noch nicht ganz im klaren, ob dies meine sprache ist. bisher habe ich immer mit php entwickelt.

    nun habe ich ein wenig probiert,

    #include<iostream>
        using namespace std;
    
        int add(int,int);
    
        class foo
        {
          public:
           // Contructor !
          foo()
          {
           this->print("Contructor gestartet!");
           int this->second(5);
          }
    
          void print(string str)
          {
           cout<<str<<endl;
          }
    
          void add(int first)
          {
               this->print(this->second + first);
          }
    
        };
    
        int main()
        {
         foo = new foo;
         foo->add(2);
         foo->add(2);
         string test;
         cin>>test;
        }
    

    Leider habe ich irgendwo einen fehler, ich glaube es hängt mit der sichtbarkein der variablen zusammen, von php bin ich gewöhnt mit this klassenintern und funktionsübergreifend arbeiten kann.

    dev-c++ spuckt hier den fehler aus:

    int this->second(5);
    

    wäre super wenn ihr einmal drüber gucken könntet und mir sagen könntet wo mein fehler ist ...
    danke, tim



  • Das int gehört da nicht davor 😉
    Deklarationen von Membervariablen haben im Konstruktor nichts zu suchen (lediglich die Initialisierung derer).

    class foo
    {
       public:
         // Contructor !
         int second;  
         foo()
         {
            print("Contructor gestartet!");
            second=5;
         }
    };
    

    Alternativ die Initialisierungsliste nutzen (was in der Regel vorzuziehen ist):

    foo() : second(5)
    {
      print("Contructor gestartet!");
    }
    

    this-> ist in C++ übrigens überflüssig. Alle Membervariablen sind innerhalb der Memberfunktionen von Natur aus sichtbar.



  • Füg in Zeile 8 mal ein "int second;" ein.
    Dann änder Zeile 13 in "second=5;".
    Und das ständige "this->" ist zwar nicht falsch, aber meistens überflüssig 😉



  • #include <iostream>
    #include <string> // für den std::string-Typ
    using namespace std;
    
    // int add(int,int);    unnötig, da die Funktion nirgends definiert wird
    
    class foo
    {
      public:
        foo()
        {
          //this->print("Contructor gestartet!");    unnötig
          print("Constructor gestartet!");
          //int this->second(5);    ungültige Syntax
          second = 5; // hier mit Wert initialisieren, besser die Initialisierungsliste verwenden
        }
    
      private:
        int second; // Hier die Membervariable definieren
    
      public:
        void print(string str)
        {
          cout<<str<<endl;
        }
    
        void add(int first)
        {
          //this->print(this->second + first);    unnötig und ungültig
          cout << (second + first) << endl;
          // wenn du eine Zahl mit einer Funktion ausgeben willst, dann muss diese auch eine Zahl als Parameter nehmen und keinen String, also "void print(int zahl)"
        } 
    };
    
    int main()
    {
        //foo = new foo;    unnötig und ungültig
        foo bar; // Klasse und Objekt können nicht den selben Namen haben
        // alternativ "foo* bar = new foo;", aber dann musst du das Objekt auch wieder löschen
        //foo->add(2);    ungültig
        //foo->add(2);
        bar.add(2);  // oder "bar->add(2);", wenn du mit Zeigern arbeitest
        bar.add(2);
        // "delete bar;" falls du die Variante mit new gewählt hast
    
        string test; // wenn das dafür da ist, wofür ich denke, dass es da ist, dann lies mal den FAQ-Artikel "Automatisches Schließen der Konsole verhindern"
        cin>>test;
    }
    

Anmelden zum Antworten