se esperaba ‘struct matrix_t *’ pero el argumento es de tipo ‘struct matrix_t *’? _? ninguna diferencia

main.c:78:25: erreur: assignment from incompatible pointer type [-Werror] main.c:81:9: erreur: 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 *' 

la línea 6 es la función matrix_multiply

Aquí está mi código que comienza en la línea 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); 

Y aquí están mis prototipos de funciones y estructura.

 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); 

Realmente no entiendo este mensaje de error. Por favor, ayúdame 🙂

Su definición de tipo debe leer

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

De lo contrario, el tipo matrix_t refiere a un tipo de estructura completo pero sin nombre, mientras que struct matrix_t refiere a un tipo de estructura diferente, con nombre pero incompleto, que nunca define.

Cambie su definición de struct a esto:

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

¿Nota la diferencia?

struct matrix_t no es lo mismo que typedef ... matrix_t ; existen en diferentes espacios de nombres; por lo tanto, en su versión del código, el comstackdor asume que la struct matrix_t *next refiere a un tipo diferente, incompleto.

Aha, no tienes una struct matrix_t pero el next campo se declara usando una etiqueta struct. Esto causa problemas cuando se usa el next campo.

matrix_t podría ser tanto una etiqueta de estructura como un nombre de tipo, ya que están en diferentes espacios de nombres, pero tal como está, su definición comienza con …

 struct { 

no…

 struct matrix_t { 

En otras palabras, usted tiene una estructura sin nombre que tiene un typedef llamado matrix_t pero en realidad nunca define una struct matrix_t.