Ein statischer Memberverweis muss relativ zu einem bestimmten Objekt sein ?!?!?!?!?!



  • Hallo zusammen,

    ich versuche momentan Schiffe versenken zu programmieren, das spielfeld lege ich als 3D Array an und die Größe soll leicht zu ändern sein. Das problem liegt bei den Indizes des Arrays. Kann man das anders lösen?

    Danke im Vorraus

     #pragma once
    #include <iostream>
    #include <iomanip> 
    #include <fstream>
    #include <string>
    #include <vector>
    using namespace std;
    
    //Klasse
    class Field
    {
    public:
    	int zeile = 12; //Y-Größe
    	int spalte = 12; //X-Größe
    	char field[zeile][spalte][3];
    	void checkSunk();
    	bool checkWin();
    	bool checkHit(char x_cord, int y_cord);
    	void scanData();
    	void displayField(int d);
    	bool checkField();
    	Field();
    	~Field();
    };
    

  • Global Moderator

    Was genau ist dein Problem? Wir können dir nicht helfen, wenn du keine Fragen stellst.

    Dein Design hat große Schwierigkeiten, sowohl technischer Art, als auch vom Modell an sich.
    Probleme, ohne bestimmte Reihenfolge:

    • Dynamische Arrays in C++ gehen ganz, ganz anders. Was du da hast ist C und ist in standardkonformen C++ sogar verboten (aber manche Compiler lassen es als Erweiterung zu). Und auch in C wäre dies kein dynamisches Array, sondern ein Array, dessen Größe einmalig zur Laufzeit festgelegt wird.
    • Warum ist das Spielfeld dreidimensional bei Schiffe Versenken? Klingt nach falschem Design.
    • Vermutung: Der Datentyp des 2D-Felds soll wahrscheinlich etwas anderes sein als char[3]. Wahrschienlich eher eine eigene Feldklasse.
    • Warum muss die Größe des Spielfelds veränderlich sein. Klingt nach falschem Design.
    • Warum hat ein Spielfeld bei dir nochmal ein inneres Spielfeld? Klingt nach falschem Design.
    • Vermutung: Deine Klasse "Field" repräsentiert kein Spielfeld, sondern eher ein Regelwerk oder eine Spielrunde.
    • Die ganzen Methoden deiner Klassen machen keinen erkennbaren Sinn in ihrer Kombination von Name, Parametern, und Rückgabewert. Vermutlich katastrophales Design.
    • Der parameterlose Konstruktor macht nicht den geringsten Sinn. Wahrscheinlich Designproblem.
    • Der Destruktor in einer Klasse mit nur trivialen Membern macht noch viel weniger Sinn. Und falls der Destruktor wider Erwarten doch irgendwelche Logik ausführt, hast du höchstwahrscheinlich die Regel der großen 3 verletzt. Vermutlich Unwissen über den Sinn und Unsinn von Destruktoren und blindes Nachmachen .

    Vermutlich würde sich dein Problem, was auch immer das sein mag, von alleine lösen, wenn du nur diese Designprobleme abstellen würdest. Mir ist aber auch klar, dass du vermutlich gar nicht weißt und nie gezeigt bekommen hast, wieso obiges ganz großer Murks ist. Vermutlich hat dir sogar ein Lehrer oder Lehrbuch diesen Stil beigebracht. Dann wäre der erste Schritt, das Lehrmaterial zu wechseln und noch einmal ganz von vorne zu beginnen. Kurzfristig magst du obiges trotz der Probleme noch irgendwie zu einem funktionierenden Programm zusammen frickeln, aber schon mittelfristig wirst du in große Schwierigkeiten kommen, wenn du diese schlechten Angewohnheiten weiter verfestigst.



  • Ist hart zu lesen ..
    Ja ich muss nur durch dieses Testat kommen. Ich studiere Elektrotechnik im Bereich Hardware und nach diesen Semester brauch ich C++ nicht mehr. Die Klasse Field kann einmal eine CSV Datei einlesen und in ein Array speichern, das Array ist 3D weil der Gegenspieler das oberste Array sehen kann, man selbst das 2te und im 3ten sind je nach Länge des Schiffs Zahlen platziert um nach einen Treffer sehen zu können welches Schiff genau getroffen wurde. Mein Problem ist nun folgendes das wenn ich das Array innerhalb der cpp der Klasse definiere und 2 Instanzen erstelle, das Array bei 2fachen einlesen (2 Spieler) sich überschreibt. Wenn ich es in die header rein packe, wird es von den Funktionen komischerweise garnicht erkannt.



  • Deine Chancen auf brauchbare Antworten erhöhen sich dramatisch, wenn Du die Links, die Dir SeppJ in Deinem anderen Thread gegeben hat durchliest, und nach diesen Empfehlungen eine konkrete Frage stellst.

    //edit: Die Fehlermeldung im Threadtitel ergibt so keinen sinn ... da muss ein "nicht" fehlen.



  • @phatneezy sagte in Ein statischer Memberverweis muss relativ zu einem bestimmten Objekt sein ?!?!?!?!?!:

    Ich studiere Elektrotechnik im Bereich Hardware und nach diesen Semester brauch ich C++ nicht mehr.

    Täusch dich da mal nicht. Wobei du eher C ohne ++ brauchen wirst.



  • @regenbogenschaf Ich studiere Dual und in meiner Abteilung hat niemand mit Porgammieren was am Hut



  • @phatneezy sagte in Ein statischer Memberverweis muss relativ zu einem bestimmten Objekt sein ?!?!?!?!?!:

    Ich studiere Dual und in meiner Abteilung hat niemand mit Porgammieren was am Hut

    Du willst immer nur für diese Abteilung arbeiten?