Fatal Error - Wieso?
-
Tachchen,
hab zum üben von C++ mal ein Programm mit Klassen und Objekten geschrieben,
alle Fehler behoben bis auf einen... den fatalen
hier der Code:
#include<iostream>
#include<string>using namespace std;
class Mensch
#include<iostream> #include<string> using namespace std; class Mensch { private: int age; string gender; public: Mensch(int StartAge , char *n) { StartAge=age; *n = gender; void birthday() { age++; }; void operation() { if (gender==male) { gender=female; } if else(gender==female) { gender=male; } } }; int main() { int durchlauf; cin>>durchlauf; while (durchlauf>=1) { cout<<"hallo\n"; Mensch Paul(1,male) cout<<"jahr um = 1 , op=2\n"; int option; if (option==1) { Paul.birthday(); cout<<age; } if (option==2) { Paul.operation(); cout<<gender; } } cin.get(); }
und die Meldung
1>c:\dokumente und einstellungen\dominik\eigene dateien\visual studio 2010\projects\001 alpha-erstes projekt\001 alpha-erstes projekt\first.cpp(55): fatal error C1075: Dateiende erreicht, bevor das zugehörige Element für das linke Element Klammer "{" in "c:\dokumente und einstellungen\dominik\eigene dateien\visual studio 2010\projects\001 alpha-erstes projekt\001 alpha-erstes projekt\first.cpp(7)"gefunden wurde
wäre euch dankbar wenn ihr mir sagen könnt wo der Fehler liegt
mfg
-
geschweifte klammer zu vom konstruktor fehlt
-
Steht doch in der Fehlermeldung: Die schließende geschweifte Klammer zu der öffnenden in Zeile 7 (beim Konstruktor) fehlt.
EDIT: Zu spät.
-
Der konstruktor sieht merkwürdig aus. Dieim Konstruktor übergebenen Werte (Argumente) musst du den Membervariablen zuweisen und nicht umgekehrt. Umgekehrt geht ja auch nicht, weil die Membervariablen noch gar nicht initialisiert worden sind. Das gibt natürlich Fehler.
Schreib den Konstruktor mal so:
Mensch(int StartAge , char *n) { age=StartAge; gender=*n; }
Hab jetzt nicht genau geschaut, obs noch andere Fehler im Code hat.
*Edit
Ich würde als Parameter einen string und nicht einen pointer auf char wählen.
-
korrigiert...
1>c:\dokumente und einstellungen\dominik\eigene dateien\visual studio 2010\projects\001 alpha-erstes projekt\001 alpha-erstes projekt\first.cpp(15): error C2440: '=': 'std::string' kann nicht in 'char' konvertiert werden 1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden 1>c:\dokumente und einstellungen\dominik\eigene dateien\visual studio 2010\projects\001 alpha-erstes projekt\001 alpha-erstes projekt\first.cpp(23): error C2065: 'male': nichtdeklarierter Bezeichner 1>c:\dokumente und einstellungen\dominik\eigene dateien\visual studio 2010\projects\001 alpha-erstes projekt\001 alpha-erstes projekt\first.cpp(25): error C2065: 'female': nichtdeklarierter Bezeichner 1>c:\dokumente und einstellungen\dominik\eigene dateien\visual studio 2010\projects\001 alpha-erstes projekt\001 alpha-erstes projekt\first.cpp(27): error C2059: Syntaxfehler: 'else' 1>c:\dokumente und einstellungen\dominik\eigene dateien\visual studio 2010\projects\001 alpha-erstes projekt\001 alpha-erstes projekt\first.cpp(28): error C2143: Syntaxfehler: Es fehlt ';' vor '{' 1>c:\dokumente und einstellungen\dominik\eigene dateien\visual studio 2010\projects\001 alpha-erstes projekt\001 alpha-erstes projekt\first.cpp(29): error C2065: 'male': nichtdeklarierter Bezeichner 1>c:\dokumente und einstellungen\dominik\eigene dateien\visual studio 2010\projects\001 alpha-erstes projekt\001 alpha-erstes projekt\first.cpp(40): error C2065: 'male': nichtdeklarierter Bezeichner 1>c:\dokumente und einstellungen\dominik\eigene dateien\visual studio 2010\projects\001 alpha-erstes projekt\001 alpha-erstes projekt\first.cpp(41): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'cout' 1>c:\dokumente und einstellungen\dominik\eigene dateien\visual studio 2010\projects\001 alpha-erstes projekt\001 alpha-erstes projekt\first.cpp(46): error C2065: 'age': nichtdeklarierter Bezeichner 1>c:\dokumente und einstellungen\dominik\eigene dateien\visual studio 2010\projects\001 alpha-erstes projekt\001 alpha-erstes projekt\first.cpp(51): error C2065: 'gender': nichtdeklarierter Bezeichner
neue meldungen.... mist^^ okay war ja nur ne übung
okay
der zeiger *n geht nicht mit gender, string und char passen nicht... wie kann ich es sonst machen?
und die anderen Fehler? wieso kommen die auf einmal?
mfg
EDIT:
der"neue" Code
#include<iostream> #include<string> using namespace std; class Mensch { private: int age; string gender; public: Mensch(int StartAge , string parameterTest) { age=StartAge; gender=parameterTest; } void birthday() { age++; }; void operation() { if (gender==male) { gender=female; } if else(gender==female) { gender=male; } } }; int main() { int durchlauf; cin>>durchlauf; while (durchlauf>=1) { cout<<"hallo\n"; Mensch Paul(1,male) cout<<"jahr um = 1 , op=2\n"; int option; if (option==1) { Paul.birthday(); cout<<age; } if (option==2) { Paul.operation(); cout<<gender; } } cin.get(); }
-
Dann machs mal so:
gender = n
*Edit
Line 42 wird option nicht initialisiert.Und wo ist denn male und female deklariert?
Ausserdem erzeugst du jenachdem eine Endlosschleife.
-
Ganz ehrlich... da sind einige Fehler drin.
Probier doch mal ein etwas noch einfachers Beispiel. Weil da hat es schon ein par grundlegende Fehler drin. Mach mal ein ganz eifaches Beispiel mit z.B. 2 Getter und 2 Setter Methoden.
*Edit
Wups, sry für DP
-
ich habe mir gedacht da ich es so verstanden habe(Fehler macht jeder ! xD)
der string gender ist ein atribut von Mensch
in meinem programm anfangs male,
wenn operation ausgewählt wird, also Mensch.operation();
wird geschaut obbing! !!!VERGLEICHSOPERATOR!!! ES WERDE LICHT!
wie schaue ich ob der string gender male bzw female enthält?@ ikarus2
hab durchlauf-- vergessen
-
Also, hier mal ein Beispiel wie das sauber aussehen könnte, da ich gerade etwas vörig Zeit habe.
Beachte vor allem die getter- und setter-Methoden. Da age und gender private sind kann man auf sie nur durch public-Methoden zugreiffen, man sagt die Beiden Instanzvariablen sind gekapselt.
#include <iostream> #include <string> using namespace std; class Mensch { private: int age; string gender; public: // Konstruktor Mensch( int start_age, string start_gender ) { age = start_age; gender = start_gender; } /*** getter-Methoden ***/ // Gibt das Alter zurück int get_age() { return age; } // Gibt das Geschlecht zurück string get_gender() { return gender; } /*** setter-Methoden ***/ // Verändert das Alter void set_age( int new_age ) { age = new_age; } // Verändert das Geschlecht void set_gender( string new_gender ) { gender = new_gender; } }; int main() { Mensch paul ( 22, "männlich" ); // Ein Objekt von der Klasse Mensch wird erzeugt. // Die Werte werden ausgegeben mit Hilfe der getter-Methoden cout << "Age: " << paul.get_age() << endl; cout << "Gender: " << paul.get_gender() << endl; cout << endl << "Gender and age change:" << endl << endl; // Die Person wird mit Hilfe der setter-Methoden verändert paul.set_age( 50 ); paul.set_gender ( "weiblich" ); // Die Werte werden ausgegeben mit Hilfe der getter-Methoden cout << "Age: " << paul.get_age() << endl; cout << "Gender: " << paul.get_gender() << endl; return 0; }
-
damit hat der Tag auch einen Sinn, ich habe gelernt.
Danke
-
okay, wenn ich jetzt aber selber sagen möcht was age und gender sind, müsste ich das über einen pointer in der Methode set.age() oder set.gender() machen oder nicht?
-
Schau dir die Parameter der setter-Methoden an. Du übergibst keinen Pointer sondern ein int. Dieser übergebene Wert wird anschliessend in der Instanzvariable 'age' gespeichert.
Hoffe, das war verständlich... schau dir sonst die von mir gepostete main-Methode and.