Arraywert falsch sowieso "Programm wird geschlossen"[Anfaenger!]



  • Dennoch kommt jetzt ein Compiler Fehler (Ich nutze Dev C++ auf Windows):
    Schachbrett' has not been declared sowieNICHT_BELEGT' undeclared (first use this function)
    etc.. wenn ich die schachbrett.cpp compilen will.
    Der Code wie du ihn gepostet hast. Also die schachbrett.cpp Datei genau so wie oben.

    Edit: Ah.. ich hab nicht gewusst, dass ich die #include "schachbrett.h" ebenfalls in der cpp Datei einfuegen muss. Was eigentlich logisch istim Nachhinein.

    Wenn ich jedoch die Main.cpp compilen will, kommt noch der gleiche Fehler zu beginn..
    [Linker error] undefined reference to `Schachbrett::Schachbrett()'



  • Du musst entweder die .cpp's zu Objekten übersetzen, _ohne_ zu linken, weil sonst der Linker versucht auch die Klassen aufzulösen die in anderen .cpp-Dateien definiert sind:

    g++ -c -o schachbrett.o schachbrett.cpp
    g++ -c -o main.o main.cpp
    g++ -o schach main.o schachbrett.o
    

    Oder, wie Capipi schrieb _alle_ .cpps in einem Lauf (ohne Parameter -c) angeben:

    g++ -o schach main.cpp schachbrett.cpp
    


  • Danke.

    Wie ich schon zuvor erwähnte, ich nutze kein Linux und arbeite entsprechend nicht mit einer shell, sondern Dev-C++ auf Windows. Aber dank euch bin ich auf die Idee gekommen, die einzelnen Dateien in ein Projekt zusammenzufassen um "_alle_ .cpps in einem Lauf" zu compilieren. 🙂

    Nun bin ich im Laufe des Programmieren dch auf 2 weitere Probleme gestoßen. Das Programm funktioniert soweit gut, auch wenn einiges net schön geschrieben ist (siehe class Dame - gibt's da andere möglichkeiten für eine for-Schleife einmal beim Start eine lokale Variable zu initialisieren?).
    Jedoch treten 2 Fehler auf die ich mir nicht erklären kann.

    • Das Feld 56 bzw. 7h, d.h. brett[7,8] wird fehlerhaft angezeigt. Das Feld besitzt den unheimlichen Wert 4460608. Dabei sollten nur 0,1,2 entsprechend der enum status vorhanden sein. Der Array brett befindet sich in der Klasse Schachbrett.
      Achtung! Dieser Fehler scheint(!) nur mit der Methode schachbrett.draw() aufzutreten. Also sobald die methode aufgerufen wurde, hat das Feld diesen bizarren Wert.
    • Nachdem ich Reihe sowie Spalte eingegeben hab und die anschließenden methoden ausgerufen werden, also draw() oder ausgeben() (je nachdem wie ausgeklammert) wird das Programm mit folgendem fehler Geschlossen:

    problem_dame.ex.exe [sic!] hat einen Fehler verursacht und wird geschlossen.

    Man beachte den Ausspruch ex.exe 😕

    Der Quelltext: http://paste.ubuntuusers.de/522

    Hat jemand ne Idee?

    Edit: ich weiß das es column heißt 🤡



  • @dasreen: Du schreibst über die Grenzen deines Arrays hinaus! Merke: Wenn du ein Array schachbrett[8][8] definierst, dann gehen seine Indizes von 0 bis 7. D.h. der vom Stack reservierte Speicher für das Array befindet sich zwischen schachbrett[0][0] und schachbrett[7][7]. Aller Speicher, der sich hinter schachbrett[7][7] oder vor schachbrett[0][0] befindet, gehört nicht zu dem Array und wird vielleicht sogar von einem anderen Programm o.ä. verwendet. => Das kann zu sehr bösen Überaschungen führen :)...

    Siehe auch in der C++-FAQ: Thread Arrays und Pointer.

    Gruß Caipi



  • Manchmal frag ich mich wie solche Fehler passieren können. :>

    Vielen Dank!



  • Doch schon wieder zwickt mir ein Problemchen. Ich möchte mit einer Methode den Wert von dem brett Array wieder geben. So in etwa:

    Status Schachbrett::getStatus(int row, int colomn){
    return brett[row][colomn];
    }
    

    Doch meckert der Comipiler, dass Status kein type sei. Doch hab ich doch grad noch in der header-Datei

    enum Status{NICHT_BELEGT, BELEGT, LADY};
    

    Muss ich also Status extra als class bezeichnen, um sie als Rückgabewert zu gebrauchen?



  • Schachbrett::Status Schachbrett::getStatus(int row, int colomn){
    return brett[row][colomn];
    }
    

    Beser so?



  • Ja, wunderbar 🙂



  • ich suche Leute die [cpp] gut können. Ich arbeiter nämlich gerade bei einer eigenen Internetplattform, meine Emailadresse ist: tolsome@gmx.de

    P.S.: Sry, ich weiss das gehört jetzt net hierrein, aber ich such echt dringend Leute!



  • Gast231 schrieb:

    P.S.: Sry, ich weiss das gehört jetzt net hierrein, aber ich such echt dringend Leute!

    Ich liebe diese "Ausrede" 🤡 Wenn du weißt, daß es nicht hierher gehört, dann such dir doch die Stelle, wo es hingehört (etwas weiter unten gibt es ein Board "Projekte" dafür).


Anmelden zum Antworten