void Funktion im Globalen Bereich



  • Hallo! Krieg eine ungewöhnliche Fehlermeldung! blabla.exe hat einen Haltepunkt verursacht!

    Es muss an der funktion

    void gen_Spielfeld();
    

    liegen, denn davor war es noch nicht.

    Hier der Code. Vielen Dank im Voraus. 🙂

    #include <iostream>
    #include <conio.h>
    #include <string>
    #include <memory.h>
    using namespace std;
    
    class krieger
    {
    
    protected:   //Variabeln//
    
    		  char 
    			  krName[30];
    		  int 
    			  iLeben, 
    			  iKraft;
    		  bool 
    			  bWaffe,
    			  bZustand;
    
    public:   // FUNKTIONEN //
    
    		  void Attack();
    		  void CallName();
    
    		  //SET-Variabeln//
    
    		  void set_iLeben()
    		  {
    			  cout<<"Leben eingeben: \n";
    			  cin>> iLeben;
    
    		  }
    		  void set_iKraft()
    		  {
    			  cout<<"Kraft eingeben: \n";
    			  cin>> iKraft;
    		  }
    		  void set_bWaffe();
    
    		  //SHOW-Variabeln//
    		  void show_iLeben()
    		  {
    			  cout<<"Das Leben deines Kriegers: \n"<<iLeben<<"\n";
    		  }
    		  void show_iKraft()
    		  {
    			  cout<<"Die Kraft deines Kriegers: \n"<<iKraft<<"\n";
    		  }
    
        };
    
    //GLOBALE FUNKTIONEN //
    
    void set_krPos()
    {
    	cout<<"Position eingeben!"<<endl;
    }
    void gen_Spielfeld()
    	{
    	char 
    		spielfeld[9][9];
    
    	memset(spielfeld, 'x',100);
    
    	cout<<"  A B C D E F G H I "<<endl;
    	for(int x = 0; x < 9; x++)
    		{
    		cout<<x+1<<" ";
    		for(int y = 0; y < 9; y++)
    			{
    				cout << spielfeld[x][y] << ' ';
    			}
    		cout << '\n';
    		}
    	}
    
    int main()
    {
    	krieger Malarkey;
    	Malarkey.set_iLeben();
    	Malarkey.set_iKraft();
    	Malarkey.show_iLeben();
    	Malarkey.show_iKraft();
    	gen_Spielfeld();
    
        getch();
        }
    

  • Mod

    Du überschreibst ein 81 Elemente Array mit 100 'x'.

    edit: Darf ich fragen, wo du C++ gelernt hast? Das ist nicht besonders gut was du da machst. Du machst unnötig gefährliche Dinge, wenn du Arrays (insbesondere char-Arrays) und memset benutzt, das ist C. Und wie du siehst, geht das auch gründlich schief. Mit den in C++ üblichen Mitteln wäre dies nicht passiert.



  • Das hier:

    char spielfeld[9][9];
    

    legt ein Array mit der Dimension 9*9 an, also von 0 bis 8 Kreuz 0 bis 8.
    Es hat damit auch nur 81 statt 100 Einträge 😉



  • Und wieso funktioniert es genau so dann in der int main? Ausgekoppelt aus der Funktion, natürlich.



  • Klappt tatsächlich, auch wenn es mich verwundert, denn eben hat es noch geklappt, dh in der Main Funk!

    Vielen Dank 🙂


  • Mod

    91-9A schrieb:

    Und wieso funktioniert es genau so dann in der int main? Ausgekoppelt aus der Funktion, natürlich.

    Undefinniertes Verhalten. Du schreibst einfach irgendwo in den Speicher. Manchmal geht das gut (naja, nicht gut, aber dein Programm stürzt nicht gleich ab, was eigentlich viel schlechter ist, weil du nichts bemerkst), manchmal nicht.

    Ich habe dir in meinem ersten Beitrag noch eine Frage reineditiert.



  • Jürgen Wolf C++ Von A - Bis z!

    Aber das memset hab ich wo anders her... Kannst du mir einen Tipp geben oder mir mal allgemein sagen, was ich stilistisch verbessern könnte?

    Eins sei gesagt: Ich kann noch nicht wirklich viel. Es reicht gerade für Vererbung, Polymorphie ist schon kritisch...


  • Mod

    9A-91 schrieb:

    Jürgen Wolf C++ Von A - Bis z!

    Ich würde ja jetzt sagen, ich wusste es. Das klingt zwar billig, aber jeder andere hier im Forum kann dir bestätigen, dass ich es tatsächlich wusste, weil ich sonst gar nicht gefragt hätte.

    Aber das memset hab ich wo anders her... Kannst du mir einen Tipp geben oder mir mal allgemein sagen, was ich stilistisch verbessern könnte?

    Hör auf den Wolf zu lesen und hol dir ein gutes Buch.



  • Hab das schon öfters gehört, dass der nicht so pralle sei. Heute ist Einstieg in C++ von Arnold Willemer gekommen.

    Ist mein Stilw irklich so schlecht, auch für einen Anfänger? Versuche eigentlich alles so übersichtlich wie Möglich in der Main Funktion zu halten und in Funktionen zu packen.


  • Mod

    9A-91 schrieb:

    Ist mein Stilw irklich so schlecht, auch für einen Anfänger?

    Nein, es ist ok. Ungarische Notation würde ich jedoch lieber sein lassen, das ist eher hinderlich (ich meine damit die Buchstaben vor den Variablennamen die den Typ angeben).
    Aber man erkennt den typischen Stil von Herrn Wolf, der dir zuerst C (schlecht) beigebracht hat und dann ein paar halbgare C++-Kapitel hintendrangepackt hat. Jetzt hast du als Altlast die ganzen Arrays mit denen du nicht gut genug umgehen kannst, dafür kennst du aber auch die C++-Techniken nicht mit denen du dir diese Probleme gar nicht erst eingehandelt hättest.



  • Hättest du einen konkreten Tipp für ein gutes Buch für mich? Es sollte einsetiger gerecht sein, aber schon etwas weiter reiche als Templates!

    Womit hast du es den gelernt?





  • SeppJ schrieb:

    Ungarische Notation würde ich jedoch lieber sein lassen, das ist eher hinderlich (ich meine damit die Buchstaben vor den Variablennamen die den Typ angeben).

    Darf ich mal nach dem warum fragen? 🙂

    PS: i steht doch eig. für index und n für integer oder nicht?


  • Mod

    PRIEST schrieb:

    Darf ich mal nach dem warum fragen? 🙂

    Ok, fang mal an und nenn mir einen Vorteil, der nicht sofort zerfällt, wenn man ihn bezüglich des Typensystems von C++ betrachtet.

    Aber das hatten wir hier im Forum schon sehr oft, such mal danach.

    P.S.: Dieser Beitrag von Nexus trifft es sehr gut:
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1773551.html#1773551

    Wohlgemerkt: Ich meine die sinnlose Auszeichnung des Typens einer Variablen, nicht den Anwendungszweck, wie die UN ursprünglich gemeint war. Die Auszeichnung des Verwendungszwecks ist sehr sinnvoll. Heutzutage nimmt man dafür aber einfach den Variablennamen anstatt kryptische Abkürzungen die man in einer Tabelle nachschlagen muss.



  • Werd ich mir mal anschauen. 👍 Benutze die UN ja selbst nicht ^^.


Anmelden zum Antworten