C 预期‘;结构矩阵’;但参数的类型为‘;结构矩阵?没有区别

C 预期‘;结构矩阵’;但参数的类型为‘;结构矩阵?没有区别,c,pointers,types,struct,C,Pointers,Types,Struct,第6行是矩阵_乘法函数 这是我的代码,从第74行开始 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 *’

第6行是矩阵_乘法函数

这是我的代码,从第74行开始

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 *’
这是我的功能原型和结构

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

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

将您的
结构定义更改为:

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);
注意到区别了吗


struct matrix\u t
typedef。。。矩阵t
;它们存在于不同的名称空间中;因此,在您的代码版本中,编译器假定
struct matrix\u t*next
引用的是另一个不完整的类型。

您的类型定义应为

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

否则,类型
matrix\u t
指的是一个完整但未命名的结构类型,而
struct matrix\u t
指的是一个不同的、命名但不完整的结构类型,您从未定义过。

Aha,您没有
struct matrix\u t
但是
next
字段是使用struct标记声明的。然后,每当使用
next
字段时,就会出现问题

matrix\t
既可以是结构标记,也可以是类型名称,因为它们位于不同的名称空间中,但实际上,您的定义以

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

struct {
换句话说,您有一个未命名的结构,它有一个名为
matrix\u t
的typedef,但您从未真正定义过
struct matrix\u t。

现在很清楚:)谢谢您的快速回答,不再有任何警告!
struct matrix_t {