我编写了一个包含灵活类型连接列表的代码。 我的数据库包含一个节点列表,其中的数据可能是char *或VERTEX *(由我定义的struct)。因此我将结构定义为字段void *。 我还希望有一个比较该字段中字符串的操作,因此列表中定义了一个字段:
DATA_EQ DataEqual
并定义了一个函数,用于检查两个节点的数据是否相等:
typedef BOOL (*DATA_EQ) (void* pl, void* pr);
为了为列表定义DATA_EQ函数,在字符串数据的情况下,我在.c文件中创建了以下函数:
static BOOL stringDataEqual(char* pd1, char* pd2){
return ( strcmp(pd1, pd2) == 0 );
}
最后,我想在我的列表中定义这个函数,所以我写道:
pList->dataEqual = stringDataEqual;
但我想我试图将void *指定为char *的事实并不好。 我过去没有使用函数指针,所以我可能会犯一些愚蠢的错误...... 我得到了警告(在运行gcc后编译):
警告:从不兼容的指针类型[默认启用]传递'ListCreate'的参数1
我需要编译代码而没有任何警告,我该如何解决/解决这个问题?
感谢任何帮助过的人, 乌迪德
答案 0 :(得分:0)
使用强制转换来转换为void指针。你的职能变成了:
static BOOL stringDataEqual(void* pd1, void* pd2) {
return ( strcmp((char*)pd1, (char*)pd2) == 0 );
}
您可以通过将参数转换为void*
来调用此函数。