错误预期 ')' 试图通过引用传递
Error expected ')' trying to pass by reference
我正在尝试使用递归函数计算矩阵中连接的 1 的数量。通过引用递归传递大小 (max_sz) 给我带来了问题,但我不明白为什么它说我缺少括号。
我已经查看了 30 分钟,但不知道为什么会出现此错误。语法对我来说是正确的,但我是 C 初学者,所以我猜我 运行 进入了我以前从未见过的东西(或者我只是瞎了眼)。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int getval(int (*A)[5], int i, int j, int L, int H) {
if(i<0 || i>=L || j<0 || j>=H)
return 0;
else {
return A[i][j];
}
}
void findMaxBlock(int (*A)[5], int r, int c, int L, int H, int size, int **cntarr, int &max_sz){
if(r>=L || c >=H)
return;
cntarr[r][c]=1;
size++;
if(size>max_sz)
max_sz = size;
//search in eight directions
int direction[][2]={{-1,0},{-1,-1},{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1}};
for(int i=0; i<8; i++) {
int newi = r+direction[i][0];
int newj = c+direction[i][1];
int val = getval(A, newi, newj, L, H);
if(val>0 && (cntarr[newi][newj]==0)){
findMaxBlock(A, newi, newj, L, H, size, cntarr, max_sz);
}
}
cntarr[r][c]=0;
}
int** create2darr(int rmax, int colmax) { // In C99, you can use variable-length arrays:
int **mat = (int**)malloc(rmax*sizeof(int*));
for(int i = 0; i < rmax; i++) mat[i] = (int*)malloc(colmax * sizeof(int));
return mat;
}
int getMaxOnes(int (*A)[5], int rmax, int colmax) {
int max_sz = 0;
int size = 0;
int **cntarr = create2darr(rmax, colmax);
for(int i=0; i<rmax; i++){
for(int j=0; j<colmax; j++){
if(A[i][j] == 1){
findMaxBlock(A, i, j, rmax, colmax, 0, cntarr, max_sz);
}
}
}
return max_sz;
}
int main(int argc, char *argv[]) {
int zarr[][5] = {{1,1,0,0,0},{0,1,1,0,0},{0,0,1,0,1},{1,0,0,0,1},{0,1,1,1,1}};
printf("Number of maximum 1s are %d\n", getMaxOnes(zarr, 5, 5));
}
/*
11000
01100
00101
10001
01111
ans: 7 (diagonals count too)
*/
生成的错误如下:
connected1sInMatrix.c:14:88: error: expected ')'
void findMaxBlock(int (*A)[5], int r, int c, int L, int H, int size, int **cntarr, int &max_sz){
^
connected1sInMatrix.c:14:18: note: to match this '('
void findMaxBlock(int (*A)[5], int r, int c, int L, int H, int size, int **cntarr, int &max_sz){
^
connected1sInMatrix.c:14:88: error: parameter name omitted
void findMaxBlock(int (*A)[5], int r, int c, int L, int H, int size, int **cntarr, int &max_sz){
^
connected1sInMatrix.c:19:10: error: use of undeclared identifier 'max_sz'
if(size>max_sz)
^
connected1sInMatrix.c:20:3: error: use of undeclared identifier 'max_sz'
max_sz = size;
^
connected1sInMatrix.c:28:52: error: use of undeclared identifier 'max_sz'
findMaxBlock(A, newi, newj, L, H, size, cntarr, max_sz);
^
5 errors generated.
我知道 Whosebug 不是调试器,但我完全不知道这里发生了什么。非常感谢任何意见或建议,谢谢。
C 没有引用的概念。如果您想更改函数中的变量并希望更改在调用函数中可见,则需要将指针传递给变量。
void findMaxBlock(int (*A)[5], int r, int c, int L, int H,
int size, int **cntarr, int* max_sz){
^^
并将其用作:
findMaxBlock(A, i, j, rmax, colmax, 0, cntarr, &max_sz);
问题出在这里:
void findMaxBlock(int (*A)[5], int r, int c, int L,
int H, int size, int **cntarr, int &max_sz){
// ^----- here
您正在尝试将参数声明为引用,这是 C++ 独有的功能。
将其更改为 *max_sz
,并相应地取消引用。
在findMaxBlock
中:
...
if(size>*max_sz)
*max_sz = size;
...
findMaxBlock(A, newi, newj, L, H, size, cntarr, max_sz);
在main
中:
findMaxBlock(A, i, j, rmax, colmax, 0, cntarr, &max_sz);
我正在尝试使用递归函数计算矩阵中连接的 1 的数量。通过引用递归传递大小 (max_sz) 给我带来了问题,但我不明白为什么它说我缺少括号。
我已经查看了 30 分钟,但不知道为什么会出现此错误。语法对我来说是正确的,但我是 C 初学者,所以我猜我 运行 进入了我以前从未见过的东西(或者我只是瞎了眼)。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int getval(int (*A)[5], int i, int j, int L, int H) {
if(i<0 || i>=L || j<0 || j>=H)
return 0;
else {
return A[i][j];
}
}
void findMaxBlock(int (*A)[5], int r, int c, int L, int H, int size, int **cntarr, int &max_sz){
if(r>=L || c >=H)
return;
cntarr[r][c]=1;
size++;
if(size>max_sz)
max_sz = size;
//search in eight directions
int direction[][2]={{-1,0},{-1,-1},{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1}};
for(int i=0; i<8; i++) {
int newi = r+direction[i][0];
int newj = c+direction[i][1];
int val = getval(A, newi, newj, L, H);
if(val>0 && (cntarr[newi][newj]==0)){
findMaxBlock(A, newi, newj, L, H, size, cntarr, max_sz);
}
}
cntarr[r][c]=0;
}
int** create2darr(int rmax, int colmax) { // In C99, you can use variable-length arrays:
int **mat = (int**)malloc(rmax*sizeof(int*));
for(int i = 0; i < rmax; i++) mat[i] = (int*)malloc(colmax * sizeof(int));
return mat;
}
int getMaxOnes(int (*A)[5], int rmax, int colmax) {
int max_sz = 0;
int size = 0;
int **cntarr = create2darr(rmax, colmax);
for(int i=0; i<rmax; i++){
for(int j=0; j<colmax; j++){
if(A[i][j] == 1){
findMaxBlock(A, i, j, rmax, colmax, 0, cntarr, max_sz);
}
}
}
return max_sz;
}
int main(int argc, char *argv[]) {
int zarr[][5] = {{1,1,0,0,0},{0,1,1,0,0},{0,0,1,0,1},{1,0,0,0,1},{0,1,1,1,1}};
printf("Number of maximum 1s are %d\n", getMaxOnes(zarr, 5, 5));
}
/*
11000
01100
00101
10001
01111
ans: 7 (diagonals count too)
*/
生成的错误如下:
connected1sInMatrix.c:14:88: error: expected ')'
void findMaxBlock(int (*A)[5], int r, int c, int L, int H, int size, int **cntarr, int &max_sz){
^
connected1sInMatrix.c:14:18: note: to match this '('
void findMaxBlock(int (*A)[5], int r, int c, int L, int H, int size, int **cntarr, int &max_sz){
^
connected1sInMatrix.c:14:88: error: parameter name omitted
void findMaxBlock(int (*A)[5], int r, int c, int L, int H, int size, int **cntarr, int &max_sz){
^
connected1sInMatrix.c:19:10: error: use of undeclared identifier 'max_sz'
if(size>max_sz)
^
connected1sInMatrix.c:20:3: error: use of undeclared identifier 'max_sz'
max_sz = size;
^
connected1sInMatrix.c:28:52: error: use of undeclared identifier 'max_sz'
findMaxBlock(A, newi, newj, L, H, size, cntarr, max_sz);
^
5 errors generated.
我知道 Whosebug 不是调试器,但我完全不知道这里发生了什么。非常感谢任何意见或建议,谢谢。
C 没有引用的概念。如果您想更改函数中的变量并希望更改在调用函数中可见,则需要将指针传递给变量。
void findMaxBlock(int (*A)[5], int r, int c, int L, int H,
int size, int **cntarr, int* max_sz){
^^
并将其用作:
findMaxBlock(A, i, j, rmax, colmax, 0, cntarr, &max_sz);
问题出在这里:
void findMaxBlock(int (*A)[5], int r, int c, int L,
int H, int size, int **cntarr, int &max_sz){
// ^----- here
您正在尝试将参数声明为引用,这是 C++ 独有的功能。
将其更改为 *max_sz
,并相应地取消引用。
在findMaxBlock
中:
...
if(size>*max_sz)
*max_sz = size;
...
findMaxBlock(A, newi, newj, L, H, size, cntarr, max_sz);
在main
中:
findMaxBlock(A, i, j, rmax, colmax, 0, cntarr, &max_sz);