Variable aus get_ in int (main) benutzen



  • Da fehlt soooo viel Grundlage. Am besten du nimmst dir dein C++ Buch vor und arbeitest das Kapitel über Funktionen, Parameter und Rückgabewerte noch einmal durch. Und mach´ auch die Übungsaufgaben am Ende des Kapitels!
    Es macht mMn wenig Sinn dir jetzt zu erklären, wie man das Problem in deinem Code löst, da das ganze Design kompletter Murks ist (nimm´s bitte nicht persönlich).



  • o.O Das hab ich aus dem Buch

    C++ Von A bis Z Von Jürgen Wolf!!! Totaler Murks? Ok?!

    hm, andere Frage:

    habe hier den Code und der findet ein unerwartetes Dateiende?!!?! Doch wieso?! Hab eigentlich doch alle Klammern richtig gesetzt...

    #include <iostream>
    #include <conio.h>
    #include <time.h> 
    #include <windows.h> 
    
    using namespace std;
    
    class Krieger
    {
    
    // variablen //
    
    public :
    
    	char name[30];
    	int kraft;
    	int leben;
    	bool waffe;
    	bool zustand;
    
    //Funktionen//
    public :
    
    	void attack();
    	void callname();
    	void drive();
    
    //Setvariablen
    
    void set_name();
    void set_waffe();
    void set_zustand();
    
    //ShowFunktion//
    void show_leben()
    {
    	cout<<"Das Leben deines Kriegers ist: 100"<<endl;
    	cout<<"Die Kraft deines Kriegers ist: 100"<<endl;
    }
    void show_kampf()
    {
    	// INTEGER //
    	int gLeben, gKraft, gDiff, gImpo, iDiff, iImpo, iLeben, iKraft, atk1, atk2;
    	srand(GetTickCount());
    	gLeben = rand()%200;
    	gImpo = rand()%200;
    	iImpo = 100;
    	iLeben = 100;
    	iKraft = 100;
    	atk1 = iLeben-gKraft;
    	atk2 = gLeben-iKraft;
    	// INTERGER ENDE//
    
        cout <<"Das Leben von deinem Gegner = "<<gLeben<<endl;
    	Sleep (1000);
    	cout<<"Das Leben von deinem Krieger: "<<iLeben<<"\n";
    	Sleep (1000);
    	gKraft = rand()%200;
    	cout<<"Die Stärke von deinem Krieger: "<<iKraft<<"\n";
    	Sleep (1000);
    	cout<<"Die Stärke von deinem Gegner: "<<gKraft<<"\n";
    	cout<<"Deine Imposanz: "<<iImpo<<".\n";
    	cout<<"Die Imposanz des Gegners: "<<gImpo<<".\n";
    	if (gImpo>iImpo)
    	{
    
    		cout<<"Dein Gegner ist Imposanter! Daher beginnt er mit dem ersten Angriff!\n";
    		cout<<"Der Gegner greift mit einer Stärke von von "<<gKraft<<" an.\n";
    
    		if (atk1>0)
    		{
    			cout<<"Dein Leben sinkt auf "<<atk1<<".\n";
    			cout<<"Du startest nun zum Gegenangriff!\n";
    			cout<<"Das Leben deines Gegners sinkt auf "<<atk2<<".\n";
    			if(atk2<0)
    			{
    			cout<<"Dein Gegner fällt ihn Ohnmacht. Du hast gewonnen!\n";
    			}
    			else 
    			{
    				if (atk1<atk2)
    				{
    				cout<<"Du bist schwächer als er und gibst auf. Der Gegner hat gewonnen!\n";
    				}
    				else 
    				{
    				cout<<"Dein Gegner ist schwächer als du. Du hast gewonnen!\n";
    				}
    			}
    		}
    
    		if (atk1<0)
    		{
    		cout<<"Du bist Ohnmaechtig und hast verloren!!\n";
    		}
    
    		}
    
    	if (iImpo>gImpo)
    		{
    		cout<<"Sein Leben sinkt auf "<<atk2<<".\n";
    			if(atk2<0)
    			{
    			cout<<"Dein Gegner fällt ihn Ohnmacht. Du hast gewonnen!\n";
    			}
    			else 
    			{
    				cout<<"Dein Gegner startest nun zum Gegenangriff!\n";
    				cout<<"Dein Leben sinkt auf "<<atk2<<".\n";
    				if (atk1<atk2)
    				{
    				cout<<"Du bist schwächer als er und gibst auf. Der Gegner hat gewonnen!\n";
    				}
    				else 
    				{
    				cout<<"Du bist schwächer als dein Gegner und hast verloren!\n";
    				}
    			}
    
    		if (atk1<0)
    		{
    		cout<<"Du bist Ohnmaechtig und hast verloren!!\n";
    		}
    
    	}
    };
    
    class Gegner
    {
    	public :
    
    	char name[30];
    //voids//
    
    	void show_name()
    	{
    	 cout<<"Wie soll dein Gegner heißen?\n";
    	 cin>>name;
    
    	 cout<<"Dein Gegner heißt "<<name<<".\n";
    	};
    
    //Funktionen//
    public :
    
    	void attack();
    	void callname();
    	void drive();
    
    };
    
    int main() 
    
    {
    
    	//  int main   //
    Krieger Malarkey;
    Gegner Hulk;
    Hulk.show_name();
    int gLeben = rand() % 100;
    cout<<"Bereit für das Duell?"<<endl;
    getch();
    Malarkey.show_kampf();
    getch();
    }
    }
    

  • Mod

    Dingsdabums schrieb:

    o.O Das hab ich aus dem Buch

    C++ Von A bis Z Von Jürgen Wolf!!! Totaler Murks? Ok?!

    Ja. Das Buch ist dafür bekannt, totaler Murks zu sein. Du bestätigst es bloß.

    hm, andere Frage:

    habe hier den Code und der findet ein unerwartetes Dateiende?!!?! Doch wieso?! Hab eigentlich doch alle Klammern richtig gesetzt...

    Was soll da schon die Antwort sein? Natürlich sind die Klammern falsch, dies fällt doch sogar bei deiner manuellen Einrückung sofort auf. Guck dir alleine mal die letzte Zeile an und suche die öffnende Klammer.



  • Und jetzt? Visual Studio markiert immer di edazugehörige Klammer und meint, die letzte klammer ist mit Gegenstück, eine kweite rnicht mehr...


  • Mod

    dgdgdh schrieb:

    Und jetzt? Visual Studio markiert immer di edazugehörige Klammer und meint, die letzte klammer ist mit Gegenstück, eine kweite rnicht mehr...

    Ich sag ja auch nicht, dass es kein Gegenstück gibt, sondern dass die Klammern allgemein falsch sind. Ich jage dein Programm mal eben durch einen automatischen Einrücker, dann wird es noch deutlicher:

    #include <iostream>
    #include <conio.h>
    #include <time.h>
    #include <windows.h>
    
    using namespace std;
    
    class Krieger {
    
            // variablen //
    
            public:char name[30];
            int kraft;
            int leben;
            bool waffe;
            bool zustand;
    
            //Funktionen//
             public: void attack();
            void callname();
            void drive();
    
            //Setvariablen
    
            void set_name();
            void set_waffe();
            void set_zustand();
    
            //ShowFunktion//
            void show_leben() {
                    cout << "Das Leben deines Kriegers ist: 100" << endl;
                    cout << "Die Kraft deines Kriegers ist: 100" << endl;
            } void show_kampf() {
                    // INTEGER //
                    int gLeben, gKraft, gDiff, gImpo, iDiff, iImpo, iLeben, iKraft,
                        atk1, atk2;
                    srand(GetTickCount());
                    gLeben = rand() % 200;
                    gImpo = rand() % 200;
                    iImpo = 100;
                    iLeben = 100;
                    iKraft = 100;
                    atk1 = iLeben - gKraft;
                    atk2 = gLeben - iKraft;
                    // INTERGER ENDE//
    
                    cout << "Das Leben von deinem Gegner = " << gLeben << endl;
                    Sleep(1000);
                    cout << "Das Leben von deinem Krieger: " << iLeben << "\n";
                    Sleep(1000);
                    gKraft = rand() % 200;
                    cout << "Die Stärke von deinem Krieger: " << iKraft << "\n";
                    Sleep(1000);
                    cout << "Die Stärke von deinem Gegner: " << gKraft << "\n";
                    cout << "Deine Imposanz: " << iImpo << ".\n";
                    cout << "Die Imposanz des Gegners: " << gImpo << ".\n";
                    if (gImpo > iImpo) {
    
                            cout <<
                                "Dein Gegner ist Imposanter! Daher beginnt er mit dem ersten Angriff!\n";
                            cout << "Der Gegner greift mit einer Stärke von von "
                                << gKraft << " an.\n";
    
                            if (atk1 > 0) {
                                    cout << "Dein Leben sinkt auf " << atk1 <<
                                        ".\n";
                                    cout << "Du startest nun zum Gegenangriff!\n";
                                    cout << "Das Leben deines Gegners sinkt auf " <<
                                        atk2 << ".\n";
                                    if (atk2 < 0) {
                                            cout <<
                                                "Dein Gegner fällt ihn Ohnmacht. Du hast gewonnen!\n";
                                    } else {
                                            if (atk1 < atk2) {
                                                    cout <<
                                                        "Du bist schwächer als er und gibst auf. Der Gegner hat gewonnen!\n";
                                            } else {
                                                    cout <<
                                                        "Dein Gegner ist schwächer als du. Du hast gewonnen!\n";
                                            }
                                    }
                            }
    
                            if (atk1 < 0) {
                                    cout <<
                                        "Du bist Ohnmaechtig und hast verloren!!\n";
                            }
    
                    }
    
                    if (iImpo > gImpo) {
                            cout << "Sein Leben sinkt auf " << atk2 << ".\n";
                            if (atk2 < 0) {
                                    cout <<
                                        "Dein Gegner fällt ihn Ohnmacht. Du hast gewonnen!\n";
                            } else {
                                    cout <<
                                        "Dein Gegner startest nun zum Gegenangriff!\n";
                                    cout << "Dein Leben sinkt auf " << atk2 <<
                                        ".\n";
                                    if (atk1 < atk2) {
                                            cout <<
                                                "Du bist schwächer als er und gibst auf. Der Gegner hat gewonnen!\n";
                                    } else {
                                            cout <<
                                                "Du bist schwächer als dein Gegner und hast verloren!\n";
                                    }
                            }
    
                            if (atk1 < 0) {
                                    cout <<
                                        "Du bist Ohnmaechtig und hast verloren!!\n";
                            }
    
                    }
            };
    
            class Gegner {
                    public:char name[30];
                    //voids//
    
                    void show_name() {
                            cout << "Wie soll dein Gegner heißen?\n";
                            cin >> name;
    
                            cout << "Dein Gegner heißt " << name << ".\n";
                    };
    
                    //Funktionen//
     public:
    
                    void attack();
                    void callname();
                    void drive();
    
            };
    
            int main()
            {
    
                    //  int main   //
                    Krieger Malarkey;
                    Gegner Hulk;
                    Hulk.show_name();
                    int gLeben = rand() % 100;
                    cout << "Bereit für das Duell?" << endl;
                    getch();
                    Malarkey.show_kampf();
                    getch();
            }
    }
    

    Hat eigentlich schon jemand gesagt, dass dein Programm noch zahlreiche andere Fehler enthält? Vermutlich nicht wirklich deine Schuld, schlechter Lehrmeister eben.

    edit: Dummer Einrücker hat Tabulatoren benutzt. Dadurch sah es im Forum wie Mist aus. Hier noch einmal in einem Stil, bei dem die falsche Klammerung besonders deutlich wird.



  • Welches Buch würdet ihr mir den Empfehlen? Habemir jetzt noch Ensteig in C++ von Willemer bestellt.

    Welche haben euch geholfen? Und kannst du mir pls meine Fehler korrigieren? Ich finde sie nicht, tu tmir Leid... Bin heute sehr unkonzentriert...

    Grüße,


  • Mod

    Dingsdabums schrieb:

    Welche haben euch geholfen? Und kannst du mir pls meine Fehler korrigieren? Ich finde sie nicht, tu tmir Leid... Bin heute sehr unkonzentriert...

    Nein, da ist zu viel falsch oder schlecht. Das ist mir zu viel Arbeit. Aber vielleicht macht es jemand anderes.



  • Hm also, ich meine eigentlich nur das s läuft... Den bis vor dem Gegenüberstellen der Werte gings noch...

    Welches Buch würdest du mir den empfehlen?



  • Eventuell "C++ für Spieleprogrammierer von Heiko Kalista" zum Einstieg, da du an diesem Thema ja besonderes Interesse zeigst.

    EDIT: Ich habe dir alle Semikolonfehler entfernt und es so verändert, dass es das macht, was du wolltest.

    #include <iostream> 
    
    using namespace std; 
    
    class Krieger 
    { 
    public:
        char name[30]; 
        int kraft; 
        int leben; 
        bool waffe; 
        bool zustand; 
    
    public:
    	void attack(){}
    	void callname(){} 
    	void drive(){}
    
    	void set_leben() 
    	{ 
    		cout << "Gebe das Leben deines Kriegers ein!" << endl; 
    		cin >> leben; 
    	}
    
    	void set_kraft() 
    	{ 
    		cout << "Gebe die Kraft deines Kriegers ein!" << endl; 
    		cin >> kraft; 
    	}
    
    	void set_name(){}
    	void set_waffe(){} 
    	void set_zustand(){}
    
    	void show_leben(){ 
    		cout << "Das Leben deines Kriegers ist: " << leben << endl; 
    	} 
    
    	void show_kraft(){ 
    		cout << "Die Kraft deines Kriegers ist: " << kraft << endl; 
    	} 
    }; 
    
    class Gegner 
    { 
    public :
    	char name[30]; 
    	int kraft; 
    	int leben; 
    	bool waffe; 
    	bool zustand; 
    
    	void set_name() { 
    		cout << "Wie soll dein Gegner heißen?\n"; 
    		cin>>name; 
    
    		cout << "Dein Gegner heißt " << name << ".\n"; 
    	}
    
    	void show_kraft(){ 
    		kraft = rand() % 100; 
    		cout << kraft << endl; 
    	} 
    
    public : 
    	void attack(){}
    	void callname(){}
    	void drive(){}
    }; 
    
    int main() 
    { 
    	Krieger Malarkey;
    	Gegner Hulk;
    
    	Malarkey.set_leben();
    	Malarkey.set_kraft();
    	Malarkey.show_leben();
    	Malarkey.show_kraft();
    
    	Hulk.show_kraft();
    	cout << "Bereit für das Duell?" << endl;
    
    	Malarkey.leben = Malarkey.leben - Hulk.kraft;
    
    	cout << "Der Hulk hat angegriffen. Ihr Leben ist nun: " << Malarkey.leben << endl;
    
    	cin.get();
    	cin.get();
    	return 0; 
    }
    


  • Schon wieder ein Jürgen Wolf Opfer 😮
    Langsam komme ich zu der Ansicht, dass man ihm verbieten muss Bücher zu schreiben.

    Ein paar allgemeine Ratschläge zur Programmierung:

    - normalerweise trennt man Datenhaltung und Benutzerinteraktion (Stichwort MVC: Model/View/Controller). In deinem konkreten Fall betrifft das die Methoden set_xxx(), da wird aus der Konsole ein Wert gelesen und einem Attribut zugewiesen. Die Setter Methoden (auch Manipulatoren genannt) sollten nur das Attribut setzen und keinesfalls aus der Konsole lesen:

    class Krieger
    {
       unsigned int Kraft_;
    
       ...
    
    public:
       void setze_kraft( unsigned int Kraft )
       {
          Kraft_ = Kraft;
       }
       ...
    };
    
    ...
    Krieger K;
    
    int Kraft;
    cout << "Bitte Kraft des Kriegers eingeben" << endl;
    cin >> Kraft;
    
    K.setze_kraft( Kraft );
    

    - die Klassen Krieger und Gegner sind identisch. Warum benötigst du zwei unterschiedliche Klassen, wenn es sich um Objekte mit gleichen Attributen handelt?

    - ich finde die Mixtur aus deutschen und englischen Bezeichnern grausamst (Superlativ!). Wenn deutsch, dann ganz deutsch, und wenn englisch, dann ganz englisch. Aber nicht mischen...

    Aber besorg´ dir erst ein Mal ein vernünftiges Buch und arbeite das durch.



  • Heute ist "Einstieg in C++" von Arnold Willemer eingetrudelt. Kennt ihr das?

    Ist das denn wenistens guter Lernstoff?



  • Keine Ahnung aber hier gibts sicher gute Bücher: http://www.c-plusplus.net/forum/viewtopic-var-t-is-251551.html


Anmelden zum Antworten