此: void displayBoard(char [] []); (这是一个函数原型)
显示错误:“可能没有此类型的元素”。
我做错了什么?
答案 0 :(得分: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);
在所有情况下,我建议您通过引用传递它们以避免不必要的副本。
答案 1 :(得分: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
}
答案 2 :(得分:0)
在声明语句中,只有数组的最后一个维度可以为空,如:
int a[]; int b[5][]; int c[3][4][];
因此,如果您需要这样做,请考虑“主要”原型:
int main(int argc, char *argv[]);
将声明中的其他维度更改为*。