[英]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.