错误:在非结构或联合的情况下请求成员'id'

时间:2016-03-27 02:07:56

标签: c pointers struct

我正在编写一个比较两个顶点的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'不是结构或联合'。有人可以告诉我哪里出错了吗?

2 个答案:

答案 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)

aimvertex_t强制转换为“指向结构id的指针”。然后,您可以使用struct vertex_t运算符获取它指向->的{​​{1}}。

另请注意,*(deference)的程序 <{1}}和.