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 zuint* eingabe. Deshalb tut auchsizeofnicht, 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()besserint 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
\nam Anfang wegfällt.