My assignment is to create a simple graph that has both Nodes and Edges.
In my header file which was given and cant’t be modified I have
typedef struct Edge_s* Edge;
typedef struct Node_s* Node;
typedef struct Graph_s* Graph;
and in my 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;
}
This gives a warning on compile
warning: assignment from incompatible pointer type
I’m kind of confused here, what am I getting wrong and how should I fix it? The program is almost working and I’m getting one strange bug that I believe might be because of this.
Your typedef-definitions are mixed up badly. I’m surprised it even compiles.
You first defined typedef-name
Edgeasand then later re-defined it as
These two definitions define
Edgein two completely unrelated ways. (All C compilers I know would immediately report an error if the first group of declarations would meet the the second group in the same translation unit.)I’d say that your second struct definition should be simply
Don’t attempt to redefine an existing typedef-name. It is simply illegal in C.