Probleme mit struct
-
Moin
Ich mache zzt eine Schulung zur Programmsprache C++ .
Dabei komme ich beim Code einer Aufgabe nicht weiter.
Es soll ein Lagerprogramm unter verwendung einer Struktur und eines Feldes in der erforderlichen Größe - hier 50erstellt werden. Soweit so gut.
Bei meinem Programm erhalte ich die Fehlermeldung " i was not declared in line ...." jedoch wird int i in der ersten if Schleife deklariert.Kann von euch sich mal bitte den Code ansehen und mir erklären wo der oder die Fehler liegt/liegen.
Danke im vorraus
#include <iostream> using namespace std; // structur tulb = Teile und Lager Behaelter struct tulb{ int tulbNr; int aktiv; double l; double b; double h; long double volumen; }; // eine Kiste Einlagern lagern(tulb storage[]) { int rein; cout << " EINLAGERN \n\n"; cout << "Inventar Nr. der Kiste 1-50 : "; cin >> rein; if (rein<50 || rein>=1) { for (int i=0; i<=50; i++) { if( storage[i].aktiv != 1 && storage[50].tulbNr != rein) { cout << " Laenge der Kiste : "; cin >> storage[i].l; cout << " Breite der Kiste : "; cin >> storage[i].b; cout << " Hoehe der Kiste : "; cin >> storage[i].h; storage[i].aktiv = 1; storage[i].tulbNr = rein; storage[i].volumen = storage[i].l*storage[i].b*storage[i].h; } else { cout << " Falsche Eingabe oder Lager voll \n\n"; } } } return storage[i]; } // DAten einer Kiste Ansehen ansehenSolo(tulb storage[]) { cout <<" DATEN EINER KISTE ANSEHEN \n\n"; cout <<"Inventar Nr. der Kiste - 1 bis 50 - : "; cin >> storage[50].tulbNr; if(storage[50].tulbNr !=0 && storage[50].aktiv==1) { cout << "Inventar Nr. der Kiste : " << storage[50].tulbNr << endl; cout << "Laenge der Kiste : " << storage[50].l << endl; cout << "Breite der Kiste : " << storage[50].b << endl; cout << "Hoehe der Kiste : " << storage[50].h << endl; cout << "Volumen der Kiste : " << storage[50].volumen << endl; } else { cout << "Lagerplatz ist leer \n"; } return storage[50]; } // Daten einer Kiste aendern aendern(tulb storage[]) { cout << " DATEN AENDERN \n\n "; cout << "Inventar Nr. der Kiste :" << endl; cin >> storage[50].tulbNr; if (storage[50].tulbNr != 0 && storage[50].aktiv == 1) { cout << " Laenge der Kiste : "; cin >> storage[50].l; cout << " Breite der Kiste : "; cin >> storage[50].b; cout << " Hoehe der Kiste : "; cin >> storage[50].h; storage[50].volumen = storage[50].l*storage[50].b*storage[50].h; storage[50].aktiv=1; } else { cout << "Der Lagerplatz ist leer" << endl; } return storage[50]; } // Lagerbestand ansehen ansehenAlle(tulb storage[]) { cout << " LAGERBESTAND \n\n"; for (int i=0; i<50; i++) { if (storage[i].aktiv==1) { cout << "Inventar Nr. der Kiste : " << storage[i].tulbNr << endl; cout << "Laenge der Kiste : " << storage[i].l << endl; cout << "Breite der Kiste : " << storage[i].b << endl; cout << "Hoehe der Kiste : " << storage[i].h << endl; cout << "Volumen der Kiste : " << storage[i].volumen << endl; } else { if (storage[i].aktiv==0) { cout << " Lagerplatz leer \n"; } } } return storage[i]; } // Kiste Loeschen tulb auslagern(tulb storage[]) { cout << " AUSLAGERUNG \n\n"; cout << " Welche Kiste soll ausgelagert werden ? : "; cin >> storage[50].tulbNr; if (storage[50].aktiv==0) { cout << " Der Lagerplatz ist Leer \n"; } if (storage[50].aktiv==1) { storage[50].aktiv=0; storage[50].b=0; storage[50].l=0; storage[50].h=0; storage[50].volumen=0; cout << " Kiste "<<storage[50].tulbNr<<" ausgelagert \n\n"; } else { cout << " Falsche Eingabe \n"; } return storage[50]; } int main() { int menu; tulb storage[50]; // Hauptmenu do { cout << " HAUPTMENU \n\n"; cout << " 1. eine Kiste einlagern \n"; cout << " 2. Daten einer Kiste ansehen \n"; cout << " 3. Daten einer Kiste aendern \n"; cout << " 4. Kompletten Lagerbestand ansehen \n"; cout << " 5. eine Kiste Auslagern \n\n"; cout << " 6. Programm beenden \n"; cin >> menu; if (menu == 1) tulb lagern(); if (menu == 2) tulb ansehenSolo(); if (menu == 3) tulb aendern(); if (menu == 4) tulb ansehenAlle(); if (menu == 5) tulb auslagern(); if (menu == 6) exit(0); } while(menu !=6); return 0; }
-
@Seezer Bitte Code formatieren! (klicke auf die drei Punkte rechts, dann auf Bearbeiten, markiere den Code und klicke auf das </>-Symbol!)
Du solltest ebenfalls die Zeile verraten, die dein Compiler anmeckert, das macht es einfacher!
Im unformatierten Code kann man kaum was erkennen, aber ich vermute mal, dass dein
return storage[i];
außerhalb der for-Loop ist und du dort deswegen nicht mehr aufi
zugreifen kannst.
-
Ähnlichen und völlig falschen Code hatten wir hier doch vor ein paar Wochen. Wo hast du den abgeschrieben?
Das hier z.B.
cin >> storage[50].tulbNr;
-
@manni66
Nirgends - Ich habe die Grundstruktur aus dem Lehrbuch genommen und versucht entsprechend zu erweitern.
-
@Seezer sagte in Probleme mit struct:
@manni66
Nirgends - Ich habe die Grundstruktur aus dem Lehrbuch genommen und versucht entsprechend zu erweitern.Und wie kommt man dann auf den
cin >> storage[50].tulbNr;
Blödsinn?
-
@Seezer sagte in Probleme mit struct:
Ich habe die Grundstruktur aus dem Lehrbuch genommen
Besteht die Chance, das Lehrbuch zu wechseln oder ist das von deinem Kurs fest vorgeschrieben?
-
Vielleicht auch mal ein weiterer Hinweis:
Wenn du 50 Elemente in einem Array hast, dann haben diese die Indizes 0 bis 49. Du darfst NICHT auf das Element mit Index 50 zugreifen. Also ist alles, was wiestorage[50].tulbNr
oder ähnlich aussieht, falsch. Das 50. Element existiert nicht.if (menu == 1) tulb lagern(); if (menu == 2) tulb ansehenSolo(); if (menu == 3) tulb aendern(); if (menu == 4) tulb ansehenAlle(); if (menu == 5) tulb auslagern();
Wo kommt hier jeweils das "tulb" her und was soll das bedeuten?
-
Das wurde wohl nur geschrieben, damit es (irgendwie) kompiliert...
@Seezer weiß aber wohl nicht, was das bedeutet und wie ein Funktionsaufruf richtig aussehen muß?!
-
Fast allen von Deinen Funktionen fehlt der Rückgabetyp.
-
@Seezer sagte in Probleme mit struct:
Also derartiger Quellcode ist in modernem C++ sehr unüblich:tulb storage[]
Die Schulung scheint auf einem etwas älteren Stand zu sein.
Vermutlich würde man das eher so machen:
void aendern( std::vector<tulb> &mystorage ) { // change something }
oder noch besser, um nicht den ganzen Storage zu übergeben, wenn man nur ein einzelnes "tulb" braucht:
void einzelnes_tulb_aendern( tulb &my_tulb ) { } // aufruf: std::vector<tubl> Storage; auto iter_tulb_to_be_changed = findTulb( Storage, some_parameter ); if ( iter_tulb_to_be_changed != Storage.end() ) einzelnes_tulb_aendern( *iter_tulb_to_be_changed );
-
@daddy_felix Leider nicht . Werde mir aber noch ein zusätzliches Buch über C++ besorgen.
-
@It0101 Moin - mir fehlt eindeutig die Erfahrung um zu beurteilen ob die Schulung auf einem Aktuellen oder eher
Älteren Stand der Dinge ist.std::vector darf für diese Übung nicht verwendet werden aber es bring mich auf eine Idee.
Danke für den Input soweit
-
Dein Code sieht so aus, hätte dein Lehrer vor über 20 Jahren C programmieren gelernt und danach nur noch ein klein wenig C++ angeschaut.
Dinge wie Klassen, typedef struct oder Datentypen ala bool fehlen komplett. Daher kommen auch die 20 Jahre. Mit dem C Standard C99, welcher 1999 kam, wurde der bool Datentyp eingeführt.
Ich fürchte deine Schulung ist ein als C++ kaschierter 20 Jahre alter C Kurs.
-
@Seezer sagte in Probleme mit struct:
@daddy_felix Leider nicht . Werde mir aber noch ein zusätzliches Buch über C++ besorgen.
Dann lass dich dahingehend gut beraten hier (bzw. kram einen der Threads raus, die Frage wurde hier bestimmt schon zig mal gestellt). Es gibt verschiedene Meinungen, welches das beste C++ Buch ist, aber zumindest eine relativ klare Einigung welche Bücher man in Betracht ziehen könnte und welche man am besten direkt wegschmeißt.
Meine Empfehlung wäre an dieser Stelle "Der C++ Programmier" vom Breymann.
Schlechte Bücher überwiegen nämlich leider die Anzahl an guten Büchern.
-
@Leon0402 sagte in Probleme mit struct:
Meine Empfehlung wäre an dieser Stelle "Der C++ Programmier" vom Bergmann.
Du meinst Ulrich Breymann, nicht Bergmann.
Ansonsten gibts auch noch den C++ Primer von Lippman.Beide Bücher sind empfehlenswert.