转换void指针(在struct中工作时)

时间:2014-02-25 01:41:14

标签: c casting

我对整个C编程非常新(几周),所以请放轻松一下;-)

项目详情: 我正在制作一个火车旅行计划系统,使用给定的火车计划找到到达特定目的地的最短路线。这样就完成了图形,二元堆的排序,然后是dijkstra algortihm。因此,混乱的结构(抱歉!认为最好熟悉它们)。

我的问题:我构建了一个链表,在结构中将数据作为void(使其更通用于重用),但是当我想在使用结构时转换数据时,我得到了语法错误。

结构:

typedef struct  linked_list{
    void *data;
    struct linked_list *next;
    struct linked_list *previous;
} linked_list;

我的,可能是一个明显的错误:

if(current->((edge*)data)->to->distance > ...

如果我将数据类型更改为我的结构中的边缘(而不是尝试此特技),则此工作完全正常,但在这种情况下转换显然不起作用。

如果需要更多详细信息,请告知我们。

2 个答案:

答案 0 :(得分:3)

((edge*)current->data)->to->distance

答案 1 :(得分:0)

->运算符的右操作数必须是结构(或联合)成员的名称;它不能是演员表达。

currentlinked_list类型的表达式(推测)。

current->datavoid*类型的表达式。

要将void*表达式转换为edge*表达式,您需要将强制转换应用于表达式,而不是成员名称,因此:

(edge*)current->dataedge*

类型的表达式