Несовместимый массив указателей 2D - PullRequest
0 голосов
/ 22 января 2019

Я новичок в C, и я должен сделать программу для школы. У меня есть 3 класса: lab11.c (основной) procs.c procs.h Я получаю эту ошибку каждый раз:

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];
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 23 января 2019

TL; DR : уберите звездочку в lab11.c и procs.c : transposarMatriu([...] *matriu_dst [...])

Определение функции для transposarMatriu в procs.c объявляет matriu_dst типом массива массивов указателей на символ (*matriu_dst[][]) (см. C Правило для левого и левого правил , если вы хотите научиться расшифровывать объявления C). Вероятно, не то, что вы хотели, и это также несоответствие из объявления функции в procs.h .

Я предполагаю, что вы намеревались matriu_dst быть «изменяемой», как в вызове по ссылке, но в этом нет необходимости. Массивы передаются в функции по адресу, поэтому они по умолчанию «модифицируемые».

По той же причине нет необходимости разыменовывать matriu_dst в main.c (примените оператор *). Фактически это означает, что вы передаете первый элемент массива функции (массив символов).

0 голосов
/ 23 января 2019

Проблема возникает из-за несоответствия между определением функции в 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, как в procs.h.

Procs.c

void transposarMatriu(char matriu_ori[][T_DIM_MAX], char *matriu_dst[][T_DIM_MAX], int nfiles, int ncols) {
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...