Problem bei Array Übergabe im Konstruktor



  • Hi,
    ich möchte ein Array mit 10 Zahlen einem Konstruktor übergeben. Das Problem dabei ist das dieses im Konstruktor nicht ankommt.
    Wärend ich bei Elemente 1: korrekt 10 angezeigt bekomme, sind es bei Elemente2: nur noch 2. Was mache ich falsch

    #include <iostream>
    
    class kleinsteZahl
    {
    private:
    	int zahlen[10];
    public:
    	kleinsteZahl()
    	{
    	}
    	kleinsteZahl(int eingabe[10])
    	{
    
    			std::cout<<"\nElemente 2: <<"+sizeof(eingabe)/sizeof(int);
    			for (int i=0;i<sizeof(eingabe)/sizeof(int);i++)
    				zahlen[i]=eingabe[i];
    	}
    	int berechneKleinsteZahl()
    	{
    		int i=0;
    		int y=zahlen[0];
    		while (i < sizeof(zahlen)/sizeof(int))
    		{
    			if(zahlen[i]<y)
    				y = zahlen[i];
    			i++;
    		}
    		return y;
    	}
    
    }
    ;
    
    using namespace std;
    
    void main()
    {
    	int eingabezahlen[10];
    	char exit;
    	for (int i=0; i<10;i++)
    	{
    		cout<<"\nBitte geben Sie die "<<i+1<<" Zahl ein: ";
    		cin>> eingabezahlen[i];
    
    	}	
    	cout<<"\nElemente 1: "<<sizeof(eingabezahlen)/sizeof(int);
    	kleinsteZahl a1(eingabezahlen);
    	cout<<"\nDie kleinste Zahl ist: "<< a1.berechneKleinsteZahl();
    	cin >>exit;
    }
    


  • Arrays können nicht an Funktionen übergeben werden. Du kannst nur Zeiger oder Referenzen auf sie übergeben. Wenn du als Parameter int eingabe[10] hast, ist das gleichwertig zu int* eingabe . Deshalb tut auch sizeof nicht, was du willst - der Operator gibt die Grösse eines Zeigers (üblicherweise 4 Byte) und nicht die Grösse des Arrays zurück.

    Um das zu lösen, musst du die Grösse separat übergeben. Einfacher wäre es jedoch, Container anstelle von Arrays zu benutzen, zum Beispiel die der STL.

    Was du hier willst, ist mir auch nicht ganz klar:

    std::cout<<"\nElemente 2: <<"+sizeof(eingabe)/sizeof(int);
    

    Zudem solltest du statt void main() besser int main() schreiben, das ist nämlich Standard-C++.



  • Für so eine Berechnung eine Klasse zu verwenden ist schlichtweg Overkill.

    Schau dir außerdem mal Zeile 14 etwas genauer an, da hast du dich vertippt. Korrekt müsste dort 1 rauskommen. (Die Begründung hat Nexus schon geliefert.) Mit dem (fehlerhaften) + erreichst du nur deine Inkrementierung des Zeigers auf die vorher angebene Zeichenkette (um 1), was dazu führt, dass das \n am Anfang wegfällt.


Anmelden zum Antworten