Klasse, Feld, Zugriff auf Felder
-
Hallo zusammen!
Ich wusste nicht wie ich das Thema anders bennen sollte. Ich bin Anfängerin, also nehmt mich nicht gleich komplett außeinander

Aufgrund einer Aufgabe soll ein Verwaltungsprogramm erstellt werden.
Ich habe bisher 600 Zeilen Code und funktionieren tut irgendwie gar nichts.
Die Klasse:
class ZIMMER { private: //private Klassenattribute string Gast; int Tage, Typ, Nummer; bool Belegung; public: //öffentliche Methoden //Set um Werte zu setzen void ZIMMER_TYP (int); void ZIMMER_NR (int); void ZIMMER_TAGE (int); void ZIMMER_BELEGUNG (bool); void ZIMMER_GAST (string); //Get um Werte zu erhalten int BZIMMER_TYP (); int BZIMMER_NR (); int BZIMMER_TAGE (); bool BZIMMER_BELEGUNG (); string BZIMMER_GAST(); ZIMMER();///Deklaration des Konstruktors ZIMMER (int, int, int, bool, string);Die Methoden der Klasse:
void ZIMMER::ZIMMER_TYP(int Z_Typ) { Typ=Z_Typ; } void ZIMMER::ZIMMER_NR(int Z_Nr) { Nummer=Z_Nr; } void ZIMMER::ZIMMER_TAGE(int Z_Tage) { Tage=Z_Tage; } void ZIMMER::ZIMMER_BELEGUNG(bool Z_Belegung) { Belegung=Z_Belegung; } void ZIMMER::ZIMMER_GAST(string Z_Gast) { Gast=Z_Gast; } int ZIMMER::BZIMMER_TYP(void) { return (Typ); } int ZIMMER::BZIMMER_NR(void) { return (Nummer); } int ZIMMER::BZIMMER_TAGE(void) { return (Tage); } bool ZIMMER::BZIMMER_BELEGUNG(void) { return (Belegung); } string ZIMMER::BZIMMER_GAST(void) { return (Gast); }und die Zimmer werden in einem Feld gespeichert und Objekte erzeugt:
ZIMMER Zimmer[20]; { //Schleifen zur Generierung von Objekten //Einzelzimmer for (int i=1; i <=10; i++) { Zimmer[i].ZIMMER_TYP(100); Zimmer[i].ZIMMER_NR(100+i); Zimmer[i].ZIMMER_BELEGUNG(false); } //Doppelzimmer for (int i =11; i<=20; i++) { Zimmer[i].ZIMMER_TYP(200); Zimmer[i].ZIMMER_NR(200+i); Zimmer[i].ZIMMER_BELEGUNG(false); }Jetzt wollte ich hergehen und z.B. eine Zimmer belegen.
cout<<"Geben Sie die Übernachtungstage ein"<<endl; cin>>Zimmer[i].ZIMMER_TAGE(int Z_Tage); cout<<"Geben Sie den Namen des Gastes ein"<<endl; cin>>Zimmer[i].ZIMMER_GAST(string Z_Gast); Zimmer[i].ZIMMER_BELEGUNG(false);Da fängt's ja dann schon an. Es wird string nicht akzeptiert #include <string> habe ich deshalb gemacht (aufgrund eines Forumsvorschlages) gebracht hat es aber nicht's. Außerdem sagt er, dass die Funktion (cin>>Zimmer[i].ZIMMER_TAGE(int Z_Tage);) kein 0 Argument akzeptiert. Liege ich vielleicht mit meinem Konzept vollkommen auf dem falschen Dampfer?
Reichen die Infos die ich hier gebracht habe, oder werden zusätzliche Angaben benötigt. Für etwas Hilfe wäre ich wirklich dankbar.Danke schonmal!
-
Du hast 600 Zeilen in dem Stil geschrieben?

Solche Fehler sollte man lieber im Kleinen angehen. Nicht funktionierende Codeteile isolieren und einzeln testen. Das ist im Endeffekt wesentlich weniger Aufwand.
Zunächst mal solltest du die Grundlagen wie Funktionen verstehen. Und dann solltest du aufhören alles in GROßBUCHSTABEN zu schreiben, ist dein Capslock kaputt?
Also los, erst mal eine Funktion:#include <iostream> void print_number(int number) { std::cout << number; } int main() { print_number(5); // Du übergibst den Wert den die Variable "number" in der Funktion haben soll. // Hier noch mal "int number" zu schreiben hat ja wenig Sinn. }Und dann zu dem Zimmer:
#include <iostream> #include <string> class Room { std::string guest_; public: std::string getGuest() { return guest_; } void setGuest(std::string guest) { guest_ = guest; } }; int main() { Room room; room.setGuest("Mueller"); std::cout << room.getGuest(); // Funktioniert // std::cin >> room.setGuest(); // Geht nicht! Wie auch? Die Funktion müsste doch etwas zurückgeben, in das man lesen kann. // Way to go ist also: std::string guest; std::cin >> guest; room.setGuest(guest); }Soweit mal zu dem Grundsätzlichen Denkfehler. Da sind noch ~10 andere Dinge drin die ich komisch finde, aber bevor man das angeht sollte die Sprache doch grundlegend verstanden sein.
-
zu deinem string problem: dir fehlt der zugriff auf den std namensraum -> nutze **std::**string
wenn du dir setter methoden schreibst und die mit einer benutzereingabe verknüpfen willst, führt kein weg an temporären variablen vorbei, aber cooky hat das ja schon gezeigt. ok, es gibt da trix, aber lass die erstmal bleiben, daher gehe ich auch nicht drauf ein.
@cooky: ja es gibt viel zu beanstanden, aber wir haben alle mal klein angefangen. und wieso machen manche "großen" hier im forum, die neuen immer so kaputt für sachen, die sie zwar früher oder später lernen müssen/sollen, es aber einfach noch nicht können. das demotiviert total. daher sage ich erstmal zu dem programm, änder die 2 angesprochenen sachen und dann haste erstmald as was du willst

-
Hier gabs doch vor ein paar Tagen schonmal jemanden der eine Klasse ZIMMER hatte. Ist das wieder so eine Aufgabe von einem Professor?
-
Wie die anderen schon meinten, solltest du:
1. Ersteinmal mit kleinen Projekten anfangen. 600 Zeilen sind für eine Anfängerin nicht zu empfehlen.
2. An deinem Code-Stil arbeiten.
und 3. dich über die Funktionsweise von Klassen informieren.Da fängt's ja dann schon an. Es wird string nicht akzeptiert #include <string> habe ich deshalb gemacht
Was will man sonst machen außer #include <string>?
(cin>>Zimmer[i].ZIMMER_TAGE(int Z_Tage);) kein 0 Argument akzeptiert. Liege ich vielleicht mit meinem Konzept vollkommen auf dem falschen Dampfer?
Was willst du damit bezwecken? So kannst du doch der Funktion keinen Parameter übergeben. Dafür brauchst du eine andere Variable. So z.B.:
int iTemp = 0; cin >> iTemp; Zimmer[i].ZIMMER_TAGE(iTemp);Aber da sind noch sehr viele Fehler, die ich jetzt gar nicht alle aufzählen will und die du mit genug Fachwissen auch leicht selbst findest.