【发布时间】:2021-07-02 18:44:13
【问题描述】:
我是 C++ 和一般编码方面的新手,因为这只是我的第二门课程。对于我的任务,我必须为记忆游戏编写程序,在该游戏中,用户选择二维数组中的卡片以尝试匹配它们。然而,现在,我正在努力让我的函数调用 initializeBoard() 编译没有错误。我得到的信息是:
main.cpp:63:3: error: no matching function for call to
'initializeBoard'
initializeBoard(gameBoard, rows);
main.cpp:35:6: note: candidate function not viable: no known
conversion from 'int [rows][col]' to 'int (*)[col]' for 1st
argument
我的代码的简化副本写在下面,其中包含我认为与错误有关的行。
int rows = 4;
int col = 4;
void initializeBoard(int gameBoard[][col], int rows);
int main()
{
int players;
string p1Name, p2Name, p3Name, p4Name, p5Name;
rules();
getPlayers(players, p1Name, p2Name, p3Name, p4Name, p5Name);
if (2 < players && players < 5)
{
rows = 6;
col = 6;
}
else if (players == 5)
{
rows = 8;
col = 8;
}
int (gameBoard)[rows][col];
initializeBoard(gameBoard, rows); // I get an error saying there is no matching function for call to 'initializeBoard'
}
有人可以向我解释我哪里出错并帮助我找到解决问题的方法吗?
【问题讨论】:
-
传递一个指向第一个单元格的指针,以及最大行数和最大列数。这假设数组是连续的槽。
-
那么我需要将 rows 和 col 变量作为与数组分开的 int 参数传递吗?是的,最终结果应该看起来更像一张桌子,而不是实际的单独卡片
-
不完全是。接收二维数组的函数需要知道数组的容量,以行和列为单位。
-
注意:C++ 没有像
int (gameBoard)[rows][col];这样的可变长度数组的标准支持,所以你可能不喜欢你得到的东西。我通常做的是在一维数组中工作,所有这些都很好地包裹在一个类中,该类隐藏了将一维数组转换为二维并携带维度的数学,因此其他人不必这样做。 Here's a pretty good, simple example.
标签: c++ multidimensional-array function-call