编辑:发现一个可能的解决方案
我想将2d数组设置为2d返回,但它一直给我无意义错误:
In function 'int main()':
error: expected primary-expression before ']' token
error: expected primary-expression before ']' token
In function 'int initBoard(int (*)[25])':
error: invalid conversion from 'int (*)[25]' to 'int' [-fpermissive]
我不能弄清楚出了什么问题以及如何让错误消失。
#include <iostream>
using namespace std;
const short WIDTH = 80;
const short HEIGHT = 25;
int clearBoard();
int initBoard(int board[WIDTH][HEIGHT]);
int drawBoard();
int main()
{
int board[WIDTH][HEIGHT] = {{0}};
board = initBoard(board); // problem is this place AND should be initBoard(board);
cout << board[79][24]
return 0;
}
int initBoard(int board[WIDTH][HEIGHT])
{
unsigned int localWidth = 1;
unsigned int localHeight = 1;
while(localHeight < HEIGHT)
{
while(localWidth < WIDTH)
{
board[localWidth][localHeight] = 0;
localWidth++;
}
localHeight++;
localWidth = 1;
}
}
答案 0 :(得分:1)
函数initBoard的返回类型为int:
int initBoard(int board[WIDTH][HEIGHT]);
您正在尝试在return语句的函数体内转换为int类型int(*)[HEIGHT],并在调用该函数的语句中将int类型的对象分配给array。
在C / C ++中,数组没有赋值运算符。
以下列方式定义函数就足够了
void initBoard(int board[WIDTH][HEIGHT])
{
unsigned int localWidth = 1;
unsigned int localHeight = 1;
while(localHeight < HEIGHT)
{
while(localWidth < WIDTH)
{
board[localWidth][localHeight] = 0;
localWidth++;
}
localHeight++;
localWidth = 1;
}
}
并在main中将其称为
initBoard(board);
答案 1 :(得分:-1)
数组总是通过引用传递,您不需要显式返回它。您在函数中对其所做的任何更改都是全局的。你得到了编译错误,因为2d数组在技术上是“指向int的指针”或int**
。您可以将initBoard
更改为void
,它应该有效。您没有分配数组,而是声明它们。
你可以做动态分配而不是编译时间,但是因为你似乎知道数组应该是多大,所以这可能比它的价值更麻烦。