预期'struct matrix_t*'但参数的类型为'struct matrix_t*'?_?没有不同

yak*_*dbz 4 c struct types pointers

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 *’
Run Code Online (Sandbox Code Playgroud)

第6行是matrix_multiply函数

这是我的代码,从第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);
Run Code Online (Sandbox Code Playgroud)

这是我的函数原型和结构

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);
Run Code Online (Sandbox Code Playgroud)

我真的不明白这些错误信息.请帮我 :)

Oli*_*rth 7

将您的struct定义更改为:

typedef struct matrix_t {
   int **M;
   int nLi;
   int nCo;
   struct matrix_t *next;
} matrix_t;
Run Code Online (Sandbox Code Playgroud)

请注意区别?

struct matrix_t是不一样的typedef ... matrix_t; 它们存在于不同的命名空间中; 因此,在您的代码版本中,编译器假定struct matrix_t *next引用了不同的不完整类型.


Chr*_*oph 7

您的类型定义应该是读

typedef struct matrix_t {
   int **M;
   int nLi;
   int nCo;
   struct matrix_t *next;
} matrix_t;
Run Code Online (Sandbox Code Playgroud)

否则,类型matrix_t引用完整但未命名的结构类型,而struct matrix_t引用您从未定义的不同的,命名但不完整的结构类型.