代码之家  ›  专栏  ›  技术社区  ›  clearpilledangel

C中的“无运算符”=“匹配这些操作数”++

  •  0
  • clearpilledangel  · 技术社区  · 1 年前

    我正试图为井字游戏制作一个棋盘对象,但无法绕过这个错误。

    class Board {
        public:
            void reset() {
                board[3][3] = {
                    {" ", " ", " "},
                    {" ", " ", " "},
                    {" ", " ", " "}
                };
            };
    
        private:
            std::string board[3][3];
    
        Board() {
            reset();
        };
            
    };
    

    我尝试过将变量类型从std::string切换为char,但它抛出了一个不同的错误,这也毫无意义

    1 回复  |  直到 1 年前
        1
  •  0
  •   Jacob Glik    1 年前

    我想你可能对你的 reset() 的方法 Board 班它试图改变的价值 board 成员变量(类型为 String[][] )使用 = 运算符,这是不可能的,因为数组在C++中是不可赋值的。

    对于这个问题,我看到了两个修复程序:

    我会使用的修复方法(如果你想保持代码的相同氛围)是循环板中的每个值,并将字符串分别设置为 " " 这样地:

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            board[i][j] = " ";
        }
    }
    

    将类更改为如下所示:

    class Board {
    public:
        void reset() {
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                    board[i][j] = " ";
                }
            }
        };
    
    private:
        std::string board[3][3];
    
        Board() {
            reset();
        };
    };
    

    然而,如果你正在寻找更现代的东西,我推荐C++ std::array 而不是原始数组。利用 std::数组 将允许您访问内置 fill() 方法(即。 std::array::fill )以如下方式初始化数组:

    #include <array>
    #include <string>
    
    class Board {
    public:
        void reset() {
            board.fill(" ");
        };
    
    private:
        std::array<std::array<std::string, 3>, 3> board;
    
        Board() {
            reset();
        };
    };