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 ob

    😮 😮 😮 😮 😮 😮 😮 😮 😮 😮

    bing! !!!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.


Log in to reply