![](/img/trans.png)
[英]Warning: Incompatible pointer types assigning to 'node_t *' (aka 'struct node *') from 'mode_t' (aka 'unsigned int *')
[英]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;
我收到一條錯誤消息
不兼容的指針類型將類型節點分配給結構節點
我怎樣才能正確地做到這一點?
head
被聲明為Node *
,並且由於 typedef 這相當於struct Element*
。
next
成員被聲明為struct NODE *
。
struct NODE *
與struct Element *
。
您可能應該將結構成員更改為
struct Element *next;
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;
您聲明了兩個不同的結構。 第一個具有類型別名 Node 的struct Element
類型,並在其定義中聲明了類型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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.