C:结构中的结构

Odi*_*god 2 c struct pointers

我的任务是创建一个包含节点和边缘的简单图形.在我给出的头文件中,我无法修改

typedef struct Edge_s* Edge;
typedef struct Node_s* Node;
typedef struct Graph_s* Graph;
Run Code Online (Sandbox Code Playgroud)

在我的图表中

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;
}
Run Code Online (Sandbox Code Playgroud)

这会在编译时发出警告

warning: assignment from incompatible pointer type
Run Code Online (Sandbox Code Playgroud)

我在这里有点困惑,我出错了什么,我该如何解决?该程序几乎正在工作,我得到一个奇怪的错误,我认为可能是因为这个.

AnT*_*AnT 6

你的typedef定义很糟糕.我很惊讶它甚至编译.

您首先将typedef-name定义Edge

typedef struct Edge_s* Edge;
Run Code Online (Sandbox Code Playgroud)

然后重新定义为

typedef struct{
  size_t w;
  struct Node_s* target;
}*Edge;
Run Code Online (Sandbox Code Playgroud)

这两个定义Edge以两种完全不相关的方式定义.(如果第一组声明符合同一翻译单元中的第二组,我知道的所有C编译器都会立即报告错误.)

我要说你的第二个结构定义应该是简单的

struct Edge_s {
  size_t w;
  struct Node_s* target;
};
Run Code Online (Sandbox Code Playgroud)

不要尝试重新定义现有的typedef-name.在C中它完全是非法的