簡體   English   中英

C當使用struct * = struct時,如何從不兼容的指針類型解析分配

[英]C how can i resolve assignment from incompatible pointer type when using struct* = struct

我在這些論壇中拖拉尋找一種解決該問題的方法,但是我似乎找不到適合我具體解決方案的解決方案。

我遇到的問題是,我想實現鏈表的一個方面,但我不關心列表的開頭,我只需要知道結構的順序即可。

總體思路是:

結構1->結構2->結構n->結構n + 1

這樣我就可以去了:

結構n->結構n-1 .......

我已經定義了我的標題是這樣的:

 typedef struct {

        unsigned int value;
        struct item* prev;


    } item;

我從一個簡單的文件中讀取了多個項目值,該文件基本上是:

23
421
12
234
etc ...

我將這些項目加載到足夠大的malloc內存區域中,當我從文件中讀取它們時,我會這樣做:

item* items;
items = malloc(no_of_lines * sizeof(item));

 for (i = 0; i < no_of_lines; i++) {
        if (fscanf(fp, "%d", &item[i] != EOF) {
      }
    }

但是當我嘗試將前一個分配給一個項目時:

for (i = 0; i < no_of_lines; i++){
   if(i != 0){
      item[i].prev = item[i-1];
      }
 }

我收到此錯誤:

incompatible types when assigning to type ‘struct item *’ from type ‘item’

我已經試過了:

for (i = 0; i < no_of_lines; i++){
       if(i != 0){
          item[i].prev = &item[i-1];
          }
     }

for (i = 0; i < no_of_lines; i++){
           if(i != 0){
              item[i].prev = (item *)&item[i-1];
              }
         }

都產生警告:

assignment from incompatible pointer type

有任何想法嗎?

問題出在以下定義中:

typedef struct {
    unsigned int value;
    struct item* prev;  /* <---- here */
} item;

該行聲明此結構的指針,因為在完整聲明的末尾才引入名稱item 這實際上是一個無名的結構,別名為item 在某個地方,您有另一個可能類似的結構稱為item

struct item {
     //unknown contents (for me)
};

區別在於,此類型稱為struct item而原始類型只是item ,而沒有struct關鍵字。

如果它們不相同,則應使用不同的名稱,以免造成混淆。 如果它們實際上是相同的,則應刪除其中一個聲明。 請注意,您可以同時聲明命名的struct和別名,然后它們都將引用相同的類型:

typedef struct item {
    unsigned int value;
    struct item* prev;
} item;

或者,您可以在單獨的聲明中進行操作,這是相同的;

struct item {
    unsigned int value;
    struct item* prev;
};
typedef struct item item;

除此之外,分配是通過&運算符進行的:

items[i].prev = &items[i-1];

您的問題可能是typedef。 只需刪除關鍵字。

typedef struct {

        unsigned int value;
        struct item* prev;


    } item;

這意味着聲明一個稱為“ item”的類型。

作為一般規則:為所有內容賦予唯一的名稱。 您有一個“結構項”和typedef“ item”和“ item = malloc”。 混亂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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