如何解决如何将二维 int 数组正确传递给 C++ 中的函数?
我是 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,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'
}
有人可以向我解释我哪里出错并帮助我找到问题的解决方案吗?
解决方法
const int rows = 4;
const int col = 4;
void initializeBoard(int gameBoard[][col],int rows);
在这里,您定义了一个函数,该函数将接受一个二维数组(通过指针),其中第二个维度为 4。行数不固定,但您将该维度作为第二个参数传递。
>看起来在 main
中,您试图传递一个没有大小为 4 的列(或第二维)的二维数组。因此编译器错误。第二个维度必须是 4 才能调用 initializeBoard
。
尽管您的编译器允许您声明一个可变大小的二维数组,但此 isn't allowed 按照 C++ 标准。这是一个特定于编译器的扩展。
您可以使用向量的向量,而不是像在 C 中那样使用原始数组。这将允许您传递二维矩阵:
#include <vector>
void initializeBoard(std::vector<std::vector<int>> &gameBoard);
或者,您可以将函数转换为模板函数,以便为您推断维度:
template<size_t row,size_t col>
void initializeBoard(int (&gameBoard)[row][col])
{
...
}
但是,在编译时应该知道数组维度。如果不是,您最好使用向量向量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。