0

我用其他语言编程过,但是现在我正在学习 C++,我发现了一个问题。我正在尝试使用将数组作为参数的方法来解决递归问题。我考虑过使用公共数组,也许,但我不能使用数组。

从我所读到的,在我看来,这与记忆有关。(我认为,即使它消耗大量内存,每次调用再次创建它也是可行的。)

这是一些代码:

static void FindSolution(int row, int column, bool answer[][8][8]) {
    for(int i = 0; i < 8; i++) 
        //Some processing…
        bool temp = true;
        FindSolution(0, column + 1, answer[row][column] = temp);
    }
}

我如何才能真正使用数组?不知何故

错误:

error: array type 'bool [8]' is not assignable
         FindSolution(0, column + 1, answer[row][column] = temp);
4

3 回答 3

2

[]你的阵列上有一个额外的。您已将其声明为 3D 数组,但随后您尝试将其分配给它,就像它是 2D 数组一样。编译器会因为您尝试将 bool 值分配给数组而感到不安,这正是您正在做的事情:

answer[row][column] = temp;

temp有类型bool,但answer[row][column]有类型bool[8]

而是声明没有额外的参数[]

static void FindSolution(int row, int column, bool answer[8][8]) {
于 2013-10-01T01:19:51.033 回答
0

这有一些直接的问题。

第一个问题:函数签名不正确 您已将第三个参数声明为 3 维数组,但您似乎只想处理二维。有几种方法可以重新声明此函数以接受 2D 数组,对于所有选项,请参见此处接受的答案。就个人而言,在这种情况下,我会使用模板选项,除非有特定的理由不这样做。类似于以下内容:

template<size_t _rows, size_t _columns>
static void FindSolution(int row, int column, bool (&answer)[_rows][_columns]) {
    // todo: Some processing...
}

这使您可以在编译时准确地知道数组的大小,当然这不适用于动态分配的数组,但是看到您似乎在编译时已经知道数组的尺寸,我认为这不是t 一个问题。如果是,请检查将二维数组传递给我附加的链接中的函数的其他方法。

第二个问题:递归调用 第二个问题是你如何进行递归调用。

FindSolution(0, column + 1, answer[row][column] = temp);

分配给数组temp中特定位置的结果answer不是answer数组,而是 的值temp。以下语句有效:

answer[row][column] = temp

试图将单个bool值作为二维数组传递,这是行不通的。为了再次正确调用该方法,您需要将 temp 分配给答案数组,然后再次调用该函数。

answer[row][column] = temp;
FindSolution<_rows,_columns>(0, column + 1, answer);

应该可以正常工作。(请注意此处的显式模板参数<_rows,_columns>,仅当您使用我在上面发布的使用模板的函数签名时才需要这样做)

于 2013-10-01T01:39:50.717 回答
0

您不断增加“列”,但您从不检查它以确保它没有达到 8。当它达到 8 时,您就超出了数组的末尾,并且您会收到错误消息。

于 2013-10-01T01:22:18.240 回答