Search code examples
cpointerstypesstruct

expected ‘struct matrix_t *’ but argument is of type ‘struct matrix_t *’ ?_? no difference


main.c:78:25: error: assignment from incompatible pointer type [-Werror]
main.c:81:9: error: passing argument 2 of ‘matrix_multiply’ from incompatible pointer type [-Werror]
main.c:6:11: note: expected ‘struct matrix_t *’ but argument is of type ‘struct matrix_t *’

Line 6 is the matrix_multiply function

Here is my code, which begins at line 74:

matrix_t *m;
matrix_t *first = matrix_reader_next(reader);
matrix_t *previous = first;
while ( (m = matrix_reader_next(reader))) {
    previous->next = m;
    previous = m;
}
matrix_t *result = matrix_multiply(first,first->next);

And here are my functions prototypes and struct:

typedef struct {
   int **M;
   int nLi;
   int nCo;
   struct matrix_t *next;
} matrix_t;

matrix_t* matrix_multiply(matrix_t* first, matrix_t*second);
matrix_t* matrix_reader_next(matrix_reader_t *r);

I really don't understand this error message.


Solution

  • Your type definition should read

    typedef struct matrix_t {
       int **M;
       int nLi;
       int nCo;
       struct matrix_t *next;
    } matrix_t;
    

    Otherwise, the type matrix_t refers to a complete but unnamed structure type, whereas struct matrix_t refers to a different, named but incomplete structure type which you never define.