main.c:78:25: erreur: assignment from incompatible pointer type [-Werror] main.c:81:9: erreur: passing argument 2 of 'masortingx_multiply' from incompatible pointer type [-Werror] main.c:6:11: note: expected 'struct masortingx_t *' but argument is of type 'struct masortingx_t *'
la ligne 6 est la fonction masortingx_multiply
voici mon code qui commence à la ligne 74
masortingx_t *m; masortingx_t *first = masortingx_reader_next(reader); masortingx_t *previous = first; while ( (m = masortingx_reader_next(reader))) { previous->next = m; previous = m; } masortingx_t *result = masortingx_multiply(first,first->next);
et voici mes prototypes de fonction et la structure
typedef struct { int **M; int nLi; int nCo; struct masortingx_t *next; } masortingx_t; masortingx_t* masortingx_multiply(masortingx_t* first, masortingx_t*second); masortingx_t* masortingx_reader_next(masortingx_reader_t *r);
Je ne comprends vraiment pas ces messages d’erreur. Aidez-moi, s’il vous plaît 🙂
Votre définition de type devrait se lire
typedef struct masortingx_t { int **M; int nLi; int nCo; struct masortingx_t *next; } masortingx_t;
Sinon, le type masortingx_t
fait référence à un type de structure complet mais non nommé, tandis que struct masortingx_t
fait référence à un type de structure différent, nommé mais incomplet, que vous ne définissez jamais.
Changez votre définition de struct
en ceci:
typedef struct masortingx_t { int **M; int nLi; int nCo; struct masortingx_t *next; } masortingx_t;
Remarquez la différence?
struct masortingx_t
n’est pas la même chose que typedef ... masortingx_t
; ils existent dans différents espaces de noms; Ainsi, dans votre version du code, le compilateur suppose que struct masortingx_t *next
fait référence à un type différent, incomplet.
Aha, vous n’avez pas encore de struct masortingx_t
, le champ next
est déclaré à l’aide d’une balise struct. Cela pose alors des problèmes chaque fois que le champ next
est utilisé.
masortingx_t
pourrait être à la fois une balise struct et un nom de type, comme ils se trouvent dans des espaces de noms différents, mais telle quelle, votre définition commence par …
struct {
ne pas…
struct masortingx_t {
En d’autres termes, vous avez une structure non nommée qui a une typedef appelée masortingx_t
mais vous ne définissez jamais réellement une struct masortingx_t.