不兼容的指针类型结构节点到节点
Incompatible pointer types struct node to node
我正在为我的课程做实验,我遇到了一些警告问题。
我们得到了一个我们不能改变的结构:
typedef struct Element{
int value;
double key1;
double key2;
struct NODE* next;
struct NODE* sort1;
struct NODE* sort2;
}Node;
这是主要代码:
struct Element * randomizer(int A){
/*Function to have "real" random*/
srand((unsigned int) time(0));
Node *head;
Node *ptr;
int i = 0;
head = NULL;
ptr = NULL;
/*Vlaues beiong intialized*/
for ( i = 0 ; i <= A; i++){
ptr = malloc(sizeof(Node));
ptr->value = rand()%11;
while (ptr->value == 0 || ptr->value == 10 ){
ptr->value = rand()%11;
}
ptr->key1 = (rand()%41)+10;
while (ptr->value == 10.0 || ptr->value == 50.0 ){
ptr->key1 = (rand()%41)+10;
}
ptr->key2 = (rand()%41)+50;
while (ptr->value == 50.0 || ptr->value == 90.0 ){
ptr->key2 = (rand()%41)+50;
}
ptr->next = head;
head = ptr;
}
ptr->sort1 = NULL;
ptr->sort2 = NULL;
return ptr;
}
在 ptr->next = head;
我收到一条错误消息
incompatible pointer types assigning type node to struct node
我怎样才能正确地做到这一点?
C是区分大小写的,所以Node
和NODE
是两个不同的、不相关的东西。您试图在代码中使用 Node
,但您说您不能更改的声明具有 NODE
,因此它们不兼容。您可能需要更改代码以也使用 NODE
.
在此 typedef 声明中
typedef struct Element{
int value;
double key1;
double key2;
struct NODE* next;
struct NODE* sort1;
struct NODE* sort2;
}Node;
您声明了两个不同的结构。第一个具有类型 struct Element
和类型别名 Node 并且在其定义中您声明了类型 struct NODE
.
即使没有拼写错误并且数据成员的类型为 struct Node *
而不是 struct NODE *
,但类型 struct Node
和 Node
不是同一类型.
你应该像这样声明结构
typedef struct Element{
int value;
double key1;
double key2;
struct Element* next;
struct Element* sort1;
struct Element* sort2;
}Node;
head
声明为 Node *
,并且由于 typedef,这等同于 struct Element*
.
next
成员声明为 struct NODE *
。
struct NODE *
与 struct Element *
不同。
您可能应该将结构成员更改为
struct Element *next;
我正在为我的课程做实验,我遇到了一些警告问题。 我们得到了一个我们不能改变的结构:
typedef struct Element{
int value;
double key1;
double key2;
struct NODE* next;
struct NODE* sort1;
struct NODE* sort2;
}Node;
这是主要代码:
struct Element * randomizer(int A){
/*Function to have "real" random*/
srand((unsigned int) time(0));
Node *head;
Node *ptr;
int i = 0;
head = NULL;
ptr = NULL;
/*Vlaues beiong intialized*/
for ( i = 0 ; i <= A; i++){
ptr = malloc(sizeof(Node));
ptr->value = rand()%11;
while (ptr->value == 0 || ptr->value == 10 ){
ptr->value = rand()%11;
}
ptr->key1 = (rand()%41)+10;
while (ptr->value == 10.0 || ptr->value == 50.0 ){
ptr->key1 = (rand()%41)+10;
}
ptr->key2 = (rand()%41)+50;
while (ptr->value == 50.0 || ptr->value == 90.0 ){
ptr->key2 = (rand()%41)+50;
}
ptr->next = head;
head = ptr;
}
ptr->sort1 = NULL;
ptr->sort2 = NULL;
return ptr;
}
在 ptr->next = head;
我收到一条错误消息
incompatible pointer types assigning type node to struct node
我怎样才能正确地做到这一点?
C是区分大小写的,所以Node
和NODE
是两个不同的、不相关的东西。您试图在代码中使用 Node
,但您说您不能更改的声明具有 NODE
,因此它们不兼容。您可能需要更改代码以也使用 NODE
.
在此 typedef 声明中
typedef struct Element{
int value;
double key1;
double key2;
struct NODE* next;
struct NODE* sort1;
struct NODE* sort2;
}Node;
您声明了两个不同的结构。第一个具有类型 struct Element
和类型别名 Node 并且在其定义中您声明了类型 struct NODE
.
即使没有拼写错误并且数据成员的类型为 struct Node *
而不是 struct NODE *
,但类型 struct Node
和 Node
不是同一类型.
你应该像这样声明结构
typedef struct Element{
int value;
double key1;
double key2;
struct Element* next;
struct Element* sort1;
struct Element* sort2;
}Node;
head
声明为 Node *
,并且由于 typedef,这等同于 struct Element*
.
next
成员声明为 struct NODE *
。
struct NODE *
与 struct Element *
不同。
您可能应该将结构成员更改为
struct Element *next;