这:无效显示板(字符[][]);(这是一个函数原型)
显示错误:“可能没有这种类型的元素”。
我究竟做错了什么?
如果不提供每个维度的元素数量,则不能将多维数组作为参数。根据管理董事会数据的方式,您有几个可用的选项。
如果数组大小是动态的,您可以使用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);
在所有情况下,我建议您通过引用传递它们以避免不必要的复制。
在声明语句中,只有数组的最后一维可以为空,例如:
诠释一个[];诠释 b[5][]; 诠释 c[3][4][];
因此,如果您需要这样做,请考虑“主要”原型:
int main(int argc, char *argv[]);
将声明中的其他维度更改为 *.
这不起作用,因为该函数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
}