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 *’
第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);
这是我的函数原型和结构
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);
我真的不明白这些错误信息。请帮帮我:)。
答案 0 :(得分:7)
将您的struct
定义更改为:
typedef struct matrix_t {
int **M;
int nLi;
int nCo;
struct matrix_t *next;
} matrix_t;
注意区别?
struct matrix_t
与typedef ... matrix_t
不同;它们存在于不同的命名空间中;所以在你的代码版本中,编译器假定struct matrix_t *next
引用了一个不同的,不完整的类型。
答案 1 :(得分:6)
您的类型定义应为
typedef struct matrix_t {
int **M;
int nLi;
int nCo;
struct matrix_t *next;
} matrix_t;
否则,类型matrix_t
引用完整但未命名的结构类型,而struct matrix_t
引用您从未定义的不同的,命名但不完整的结构类型。
答案 2 :(得分:3)
啊哈,你没有struct matrix_t
但next
字段是使用struct标签声明的。只要使用next
字段,就会出现问题。
matrix_t
可以既是结构标记又是类型名称,因为它们位于不同的名称空间中,但实际上,您的定义以...开头。
struct {
...不
struct matrix_t {
换句话说,你有一个未命名的结构,它有一个名为matrix_t
的typedef,但你从未真正定义struct matrix_t.