C++ 中‘没有运算符“=”与这些操作数匹配’

问题描述 投票:0回答:1

我正在尝试为井字游戏制作一个棋盘对象,但无法解决此错误。

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

    private:
        std::string board[3][3];

    Board() {
        reset();
    };
        
};

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

c++ class object
1个回答
0
投票

我认为您的

reset()
类的
Board
方法可能有问题。它试图更改
board
成员变量(类型为
String[][]
)的值,这是不可能的,因为它是不可变的......我认为? - 无论如何,我看到这个问题有两个修复:

我要使用的修复方法(如果您想保持代码的相同氛围)是循环遍历板上的每个值并将字符串单独设置为

" "
,如下所示:

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::array
可以让您访问内置的
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();
    };
};
© www.soinside.com 2019 - 2024. All rights reserved.