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 und TicTacToe::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 😉


Log in to reply