簡體   English   中英

C:結構中的結構

[英]C: structs in structs

我的任務是創建一個包含節點和邊緣的簡單圖形。 在我給出的頭文件中,我無法修改

typedef struct Edge_s* Edge;
typedef struct Node_s* Node;
typedef struct Graph_s* Graph;

在我的圖表中

typedef struct{
  size_t w;
  struct Node_s* target;
}*Edge;

typedef struct{
  size_t value;
  Edge* edges;
  size_t s;
}*Node;

typedef struct{
  Node* nodes;
  size_t n;
  Edge* edges;
  size_t e;
}*Graph;

Edge create_edge(Node t, size_t w){
  Edge ret = malloc(sizeof(*ret));
  ret->target = t;
  ret->w = w;
  return ret;
}

這會在編譯時發出警告

warning: assignment from incompatible pointer type

我在這里有點困惑,我出錯了什么,我該如何解決? 該程序幾乎正在工作,我得到一個奇怪的錯誤,我認為可能是因為這個。

你的typedef定義很糟糕。 我很驚訝它甚至編譯。

您首先將typedef-name Edge定義為

typedef struct Edge_s* Edge;

然后重新定義為

typedef struct{
  size_t w;
  struct Node_s* target;
}*Edge;

這兩個定義以兩種完全不相關的方式定義Edge (如果第一組聲明符合同一翻譯單元中的第二組,我知道的所有C編譯器都會立即報告錯誤。)

我要說你的第二個結構定義應該是簡單的

struct Edge_s {
  size_t w;
  struct Node_s* target;
};

不要嘗試重新定義現有的typedef-name。 在C中它完全是非法的

問問自己ret-> target指向哪種類型的對象以及它是什么類型的對象? 它們是相同類型的物體嗎?

暫無
暫無

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

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