簡體   English   中英

不兼容的指針類型結構節點到節點

[英]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 是區分大小寫的,所以NodeNODE是兩個不同的、不相關的東西。 您正在嘗試在代碼中使用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 NodeNode不是相同的類型。

你應該像這樣聲明結構

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM