Anfänger: Probleme mit Konstruktoren

Lautsprecher

Erfahrenes Mitglied
Hallo,
ich bin totaler Anfänger was C++ angeht und versuche mich gerade darin ein wenig einzuarbeiten. Im Netz bin ich auf folgende Übung gestoßen, die ich gerade versuche zu lösen. Allerdings ist mir das ganze noch nicht so klar. Vielleicht kann mir da jemand weiter helfen:

Ich hab folgende Klasse gegeben:

Code:
class Rechteck
{
     public: long laenge, breite;
    
     void inhalt_berechnen()
   {
           long inhalt = laenge * breite;
         cout .... Ausgabe des inhalts
  }
}

dazu soll ein Konstruktor mit Elementinitsialisierungsliste angelegt werden und die Attribute sollen nur von abgeleiteten Klassen geändert werden können.
Die abgeleitete Klasse ist Quader mit dem Zusatz-Element Höhe und einer entsprechenden Methode zum Inhalt_berechnen incl. Konstrukor mit Elementinitsialisierungsliste. Zusätzlich soll eine Klassenvariable Anzahl vorhanden sein, die am Ende des Programms ausgibt wie viele Quader-Instanzen angelegt worden sind. Die Attributwerte werden im hauptprogramm vom Nutzer erfragt, der die Möglichkeit haben soll, mehrere Rechtecke und Quader anzulegen.
Das ganze handelt sich dabei um eine Win32-Konsolen-Anwendung.

Mein Lösungsversuch schaut bis dato so aus:


Code:
#include <iostream>
#include <iostream>
#include <string>

using namespace std;

class Rechteck
{
      private:
                int laenge;
                int breite;
                
      public:   long anzahl_rechteck;
                
      public:  //Elementierungsliste für Rechteck
               Rechteck(long l, long b):laenge(l), breite(b){};
               
     
      
      void inhalt_berechnen()
      {
           long inhalt = laenge * breite;
           cout << "Der Flaecheninhalt des Rechtecks ist " << inhalt <<endl;
           anzahl_rechteck = anzahl_rechteck + 1;
           
           //Variablen erneut initsialisieren
           laenge = 0;
           breite = 0;
      }
      
      void anzahl_rechteck_quader_ausgeben()
      {
            cout <<  anzahl_rechteck <<endl;
           
           }
      
};   //Ende Klasse Rechteck


int main(){
    
    Rechteck neues_rechteck(0,0);
    int auswahl = 0;
    string beenden = "n";
    
    long lg = 0;     //Variablen für die Benutzereingabe, werden dann im Konstruktur an die Methoden der Klasse übergeben
    long br = 0;
    long ho = 0;
    cout <<"Willkommen zur Rechteck- und Quaderberechnung"<<endl;
   
   do  //Programm läuft solange, bis der Benutzer entscheiden es zu beenden, 
   {    //abschließend wird die Anzahl der angelegten Rechtecke und Quader ausgegeben
   
   
         cout <<"Welche Berechnungsart moechten Sie durch fuehren?"<<endl;
         cout <<"1 fuer Rechteck"<<endl;
         cout <<"2 fuer Quader"<<endl;
         cin >> auswahl;
    
         switch (auswahl)
         {
            
            case 1:   
                      
                      cout << "Geben Sie bitte die Laenge des Rechtecks ein \n";    
                      cin >> lg;
                      cout << "Geben Sie nun bitte die Breite des Rechtecks ein \n";    
                      cin >> br;
                      
                      neues_rechteck(lg,br);
                    neues_rechteck.inhalt_berechnen();
                      
                      cout << "Moechten Sie die Berechnungen beenden? \n"; 
                      cout << "j = Ja \n" ;
                      cout << "n = Nein \n";
                      cin  >> beenden;
              
                    
                      break;
                      
          case 2:   
                      cout << "Moechten Sie die Berechnungen beenden? \n"; 
                      cout << "j = Ja \n" ;
                      cout << "n = Nein \n";
                      cin  >> beenden;
                     
                      break;
         
                                           
         }
          
           neues_rechteck.anzahl_rechteck_quader_ausgeben();
    
    
         
   }while(beenden == "n");
    
     system("pause");  
    
    
}


Wie gesagt ob es Programmiertechnisch soweit korrekt ist weis ich nicht.... momentan erhalte ich immer die Fehlermeldung: no match for call to (Rechteck(long int&, long int). Irgendwie übernimmt er mir die eingelesenen Variablen nicht in den Konstruktor


Danke für Eure Hilfe
 
Hi.
die Attribute sollen nur von abgeleiteten Klassen geändert werden können.
Das hieße dann du müßtest die Attribute protected machen.
Zusätzlich soll eine Klassenvariable Anzahl vorhanden sein, die am Ende des Programms ausgibt wie viele Quader-Instanzen angelegt worden sind.
Klassenvariablen sind statische Attribute in C++, müssen also mit dem Modifizierer static deklariert und außerhalb der Klasse definiert werden.

Du rufst dort doch überhaupt keinen Konstruktor auf. Du hast ein Rechteck Objekt namens neues_rechteck mit den Ausmaßen 0, 0 kreiert (und somit auch den Konstruktor aufgerufen). Und dann versuchst du später den Rechteck::operator()(long, long) aufzurufen, den es (offensichtlich) nicht gibt.

Übrigens, die system Funktion ist in cstdlib deklariert. Die müßtest du include'n.

Gruß
 
Zurück