C++中‘no operator "=" matches these operands’错误:井字棋Board类问题
解决井字棋Board类的赋值错误
错误原因
你遇到的no operator "=" matches these operands错误,是因为C++原生数组不支持直接用赋值运算符(=)整体赋值。不管是std::string类型还是char类型的二维数组,都不能直接像你那样用大括号初始化式完成赋值。
修复方案
方案1:逐个元素赋值(兼容原生数组)
在reset函数里用嵌套循环,逐个给数组元素赋值:
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(); }; };
如果改用char类型,只需要把赋值语句改成board[i][j] = ' ';即可。
方案2:用std::array替代原生数组(更简洁)
std::array是C++标准库提供的容器,支持整体赋值操作,代码更简洁直观:
#include <array> #include <string> class Board { public: void reset() { // 直接用初始化式赋值整个二维array board = {{ {" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "} }}; }; private: std::array<std::array<std::string, 3>, 3> board; Board() { reset(); }; };
内容的提问来源于stack exchange,提问作者clearpilledangel
相关产品推荐
相关产品推荐

