2D Array in Klassen
-
Guten Morgen
ich habe hier einen Code, wo ich allerdings nicht weiß wo der Fehler ist, noch habe ich was nützliches im Internet gefunden#ifndef TICTACTOE_H #define TICTACTOE_H #include <iostream> #include <string> class TicTacToe { public: int lines = 3; int columns = 3; std::string grid[lines][columns] = { { "#", "#", "#" }, { "#", "#", "#" }, { "#", "#", "#" } }; }; #endif
Ich bekomme ich bei lines und columns in den [] Klammern die Fehlermeldung "Ein nicht statischer Memberverweiß muss relativ zu einem bestimmten Objekt sein"
Ich hoffe ihr könnte mir helfen
Schönen Tag noch
ENDER
-
@ENDER Erstens müssen die Dimensionen eines Arrays kompile-time-Konstanten sein und zweitens existiert
TicTacToe::lines
undTicTacToe::columns
nicht ohne Instanz.
-
@ENDER Dann, wenn dein grid erstellt wird muss zu Compiletime feststehen, wie groß das ist. Und, dass darf sich dann auch nicht ändern. Daher würde sowas gehen:
#ifndef TICTACTOE_H #define TICTACTOE_H #include <iostream> #include <string> constexpr int lines = 3; constexpr int columns = 3; class TicTacToe { public: std::string grid[lines][columns] = { { "#", "#", "#" }, { "#", "#", "#" }, { "#", "#", "#" } }; }; #endif
Für dich vlt interessant: std::array und std::vector
-
@Schlangenmensch Warum nicht als statische Member?
-
Danke für eure Hilfen. Hat funktioniert
-
@Swordfish
Du meinst so:#ifndef TICTACTOE_H #define TICTACTOE_H #include <iostream> #include <string> class TicTacToe { public: static const int lines = 3; static const int columns = 3; std::string grid[lines][columns] = { { "#", "#", "#" }, { "#", "#", "#" }, { "#", "#", "#" } }; }; int main(int argc, char**argv) { TicTacToe tic; }
hat keinen Grund