我是C语言的新手,我必须为学校做一个程序。 我有3节课: lab11.c(主) procs.c 进程 我每次都会收到此错误:
error: conflicting types for 'transposarMatriu'|
\procs.h|171|note: previous declaration of 'transposarMatriu' was here|
我的代码(主要):
char matriu_ori[T_DIM_MAX][T_DIM_MAX];
char matriu_dst[T_DIM_MAX][T_DIM_MAX]
transposarMatriu(matriu_ori, *matriu_dst, mida, mida);
Procs.h
extern void transposarMatriu(char matriu_ori[][T_DIM_MAX], char matriu_dst[][T_DIM_MAX], int nfiles, int ncols);
Procs.c
void transposarMatriu(char matriu_ori[][T_DIM_MAX], char *matriu_dst[][T_DIM_MAX], int nfiles, int ncols) {
int c,d;
for (c = 0; c < nfiles; c++) {
for( d = 0 ; d < ncols ; d++ ) {
*matriu_dst[d][c] = matriu_ori[c][d];
}
}
}
答案 0 :(得分:1)
问题来自procs.c
中的函数定义与procs.h
中的函数声明之间的差异。
Procs.h
extern void transposarMatriu(char matriu_ori[][T_DIM_MAX], char matriu_dst[][T_DIM_MAX], int nfiles, int ncols);
函数签名必须相同,如您所见,在这种情况下,该签名不是相同的,在procs.c
中,第二个参数的类型为char*
,而不是char
,而在{{ 1}}。
Procs.c
procs.h
答案 1 :(得分:0)
TL; DR :删除 lab11.c 和 procs.c 中的星号:transposarMatriu([...] *matriu_dst [...])
procs.c 中transposarMatriu
的函数定义声明matriu_dst
的类型为指向char(*matriu_dst[][]
)的指针数组的数组(请参见{ {3}}(如果您想学习解密C声明)。可能不是您想要的,并且与 procs.h 中的函数声明不匹配。
我假设您希望matriu_dst
像通过引用调用一样是“可修改的”,但是没有必要。数组按地址传递给函数,因此默认情况下它们是“可修改的”。
基于相同的推理,无需在 main.c 中取消引用matriu_dst
(应用*
运算符)。实际上,这样做意味着您要将数组的第一个元素传递给函数(一个字符数组)。