gpt4 book ai didi

C: 结构中的结构

转载 作者:行者123 更新时间:2023-12-04 11:36:49 27 4
gpt4 key购买 nike

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

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

在我的 graph.c 中

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;
};

不要尝试重新定义现有的类型定义名称。这在 C 中是完全非法的。

关于C: 结构中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11217237/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com