0

这:无效显示板(字符[][]);(这是一个函数原型)

显示错误:“可能没有这种类型的元素”。

我究竟做错了什么?

4

3 回答 3

1

如果不提供每个维度的元素数量,则不能将多维数组作为参数。根据管理董事会数据的方式,您有几个可用的选项。

如果数组大小是动态的,您可以使用std::vector

void displayBoard(std::vector<std::vector<int>>& board);

如果数组大小是固定的,并且您提前知道大小,则可以在参数中包含大小或使用std::array.

// Fixed size, naked array
void displayBoard(int (&board)[100][100]);

// Fixed size using std::array
void displayBoard(std::array<std::array<int, 100>, 100>& board);

如果传递给函数的数组大小固定,但您想传递不同大小的数组,则可以使用模板。

// Fixed size, naked array
template<size_t Columns, size_t Rows>
void displayBoard(int (&board)[Rows][Columns]);

// Fixed size using std::array
template<size_t Columns, size_t Rows>
void displayBoard(std::array<std::array<int, Columns>, Rows>& board);

在所有情况下,我建议您通过引用传递它们以避免不必要的复制。

于 2013-07-31T04:04:17.337 回答
0

在声明语句中,只有数组的最后一维可以为空,例如:

诠释一个[];诠释 b[5][]; 诠释 c[3][4][];

因此,如果您需要这样做,请考虑“主要”原型:

int main(int argc, char *argv[]);

将声明中的其他维度更改为 *.

于 2013-07-31T03:53:04.317 回答
0

这不起作用,因为该函数displayBoard没有关于数组维度大小的任何信息。

您最好的选择是使用std::vector- 您可以嵌套向量以获得多维,并且它们在其中携带有关其大小的信息。

例如,

std::vector<std::vector<int>> blah; // two-dimensional vector of ints
displayBoard(blah);

void displayBoard(const std::vector<std::vector<int>>& board)
{
    // do something with the board
}
于 2013-07-31T03:46:52.040 回答