我正在编写一个比较两个顶点的id的函数。
/* Returns whether aim and vertex have the same id */
bool id_eq(void *aim, void *vertex) {
if(*(Vertex)aim.id ==*(Vertex)vertex.id){
return true;
}
return false;
}
aim和vertex是struct vertex_t的两个指针。
typedef struct graph_t* Graph;
typedef struct vertex_t* Vertex;
/* A vertex is an id, a label and a list of incoming and outgoing edges */
struct vertex_t {
int id;
char *label;
/* A list of vertices representing incoming edges */
List in;
/* A List of vertices representing outgoing edges */
List out;
};
但是当我编译它时,错误发生为'错误:请求成员'id'不是结构或联合'。有人可以告诉我哪里出错了吗?
答案 0 :(得分:1)
你遇到的问题是演员
if((Vertex)aim.id == (Vertex)vertex.id)
该函数接收两个void指针
bool id_eq(void *aim, void *vertex);
在使用结构时请记住 - >要么 。在演员阵容之前会考虑到这一点,所以这应该按照以下方式解决
if( ((Vertex)aim)->id ==((Vertex)vertex)->id)
我建议返回如下,但这是个人品味:
bool id_eq(void *aim, void *vertex) {
return ((Vertex)aim)->id == ((Vertex)vertex)->id ? true:false;
}
编辑:
“?true:false”不是必需的,因为==已经导致bool但它使代码更清晰一点。
答案 1 :(得分:1)
更改
if((Vertex)aim->id == (Vertex)vertex->id){
到
if((*(Vertex)aim).id == (*(Vertex)vertex).id){
或
(Vertex)
aim
将vertex_t
强制转换为“指向结构id
的指针”。然后,您可以使用struct vertex_t
运算符获取它指向->
的{{1}}。
另请注意,*
(deference)的程序 <{1}}和.
。