c++ C2397:从“int”到“bool”的会话需要收缩会话

zc0qhyus  于 2023-01-06  发布在  其他
关注(0)|答案(2)|浏览(161)

我正在尝试创建一个数独板,并有一个指针反射到它。我做了一个2D数组,它包含了板上那个区域的数字,以及一个布尔值,它是由程序还是玩家放在那里的,这样以后如果他们放错了数字,就可以删除它。
当网格中填充0时,不会发生错误,但一旦添加了一个数字,就会标记错误C2397。
我现在的代码是:

struct sudokuNumbers {
    int number;
    bool solid = true;
};

class SudokuBoard {
private:
    sudokuNumbers sudokuBoard1[9][9]
    {
        5, 3, 4, 6, 7, 8, 9, 1, 2,
        6, 7, 2, 1, 9, 5, 3, 4, 8,
        1, 9, 8, 3, 4, 2, 5, 6, 7,
        8, 5, 9, 7, 6, 1, 4, 2, 3,
        4, 2, 6, 8, 5, 3, 7, 9, 1,
        7, 1, 3, 9, 2, 4, 8, 5, 6,
        9, 6, 1, 5, 3, 7, 2, 8, 4,
        2, 8, 7, 4, 1, 9, 6, 3, 5,
        3, 4, 5, 2, 8, 6, 1, 7, 9,
    };
};

我只是不明白程序要转换什么,因为如果我将光标悬停在数组上,它会显示板中的每个值都分配了int值,并且bool值为true。

s8vozzvw

s8vozzvw1#

Aggregate Initialization太简单了,无法完成你需要做的事情。它想初始化所有的东西,包括使用默认初始化器的bool成员。当编译器看到bool被初始化为3时,它会很不安。它会高兴地接受0(false)和1(true),这解释了为什么你的初始化器的全零版本被接受。
简单的修复方法是向sudokuNumbers添加一个只接受数字的构造函数。

struct sudokuNumbers {
    int number;
    bool solid = true;
    sudokuNumbers(int num): number(num) {} // new constructor
};

class SudokuBoard {
private:
    sudokuNumbers sudokuBoard[9][9] // uses new constructor
    {
        5, 3, 4, 6, 7, 8, 9, 1, 2,
        6, 7, 2, 1, 9, 5, 3, 4, 8,
        1, 9, 8, 3, 4, 2, 5, 6, 7,
        8, 5, 9, 7, 6, 1, 4, 2, 3,
        4, 2, 6, 8, 5, 3, 7, 9, 1,
        7, 1, 3, 9, 2, 4, 8, 5, 6,
        9, 6, 1, 5, 3, 7, 2, 8, 4,
        2, 8, 7, 4, 1, 9, 6, 3, 5,
        3, 4, 5, 2, 8, 6, 1, 7, 9
    };
};
pftdvrlh

pftdvrlh2#

你的结构体是一个int,后面跟着一个bool,所以当你初始化数组时,它应该看起来像这样:

struct sudokuNumbers {
int number;
bool solid = true;
};

class SudokuBoard {
private:
  sudokuNumbers sudokuBoard1[9][9]
  {
       5,0, 3,0, 4,0, 6,0, 7,0, 8,0, 9,0, 1,0, 2,0,
    6,0, 7,0, 2,0, 1,0, 9,0, 5,0, 3,0, 4,0, 8,0,
    1,0, 9,0, 8,0, 3,0, 4,0, 2,0, 5,0, 6,0, 7,0,
    8,0, 5,0, 9,0, 7,0, 6,0, 1,0, 4,0, 2,0, 3,0,
    4,0, 2,0, 6,0, 8,0, 5,0, 3,0, 7,0, 9,0, 1,0,
    7,0, 1,0, 3,0, 9,0, 2,0, 4,0, 8,0, 5,0, 6,0,
    9,0, 6,0, 1,0, 5,0, 3,0, 7,0, 2,0, 8,0, 4,0,
    2,0, 8,0, 7,0, 4,0, 1,0, 9,0, 6,0, 3,0, 5,0,
    3,0, 4,0, 5,0, 2,0, 8,0, 6,0, 1,0, 7,0, 9,0,
   
   };
};

相关问题