C++ 如何在函数原型中编写二维数组?

C++ 如何在函数原型中编写二维数组?,c++,visual-c++,C++,Visual C++,这: 无效显示板(字符[][]); (这是一个功能原型) 显示错误:“可能没有此类型的元素” 我做错了什么?这不起作用,因为函数显示板没有关于阵列尺寸大小的任何信息 您最好的选择是使用std::vector——您可以嵌套向量以获得多个维度,并且向量中包含有关其大小的信息 比如说, std::vector<std::vector<int>> blah; // two-dimensional vector of ints displayBoard(blah); void d

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

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


我做错了什么?

这不起作用,因为函数
显示板
没有关于阵列尺寸大小的任何信息

您最好的选择是使用
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
}
std::vector blah;//二维整数向量
显示板(废话);
无效显示板(const std::vector&board)
{
//对黑板做点什么
}

在declare语句中,只有数组的最后一个维度可以为空,如:

int a[]; int b[5][]; int c[3][4][]; INTA[];int b[5][];INTC[3][4][];

所以,如果需要这样做,请考虑“主”原型:

int main(int argc, char *argv[]); intmain(intargc,char*argv[]);
将声明中的其他维度更改为*

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

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

void displayBoard(std::vector<std::vector<int>>& 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);
//固定大小,裸数组
模板
无效显示板(int和board)[行][列];
//使用std::array固定大小
模板
无效显示板(标准::阵列和板);

在所有情况下,我建议您通过引用来避免不必要的拷贝。C++中使用<<代码>向量v< /代码>,使您的生命没有更多的列。这是有用的。offset@aaronman--由于OP希望参数类型为“char[][]”,期望“vector”就足够了。@happygreen绑架你想说什么?

// 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);