[问题] incompatible pointer warning

楼主: drunknmunky   2018-01-26 16:21:45
在64bits环境下编译
static struct class *new_class;
static char *set_devnode(struct device *dev, mode_t *mode)
{
return NULL;
}
new_class = class_create(THIS_MODULE, DRV_NAME);
new_class->devnode = set_devnode;
==================================
会一直出现 warning: assignment from incompatible pointer type
[-Wincompatible-pointer-types]
上网查了 devnode
struct class {
...
char *(*devnode)(struct device *dev, mode_t *mode);
...
};
我的认知这不就是把 (char * )塞给 (char *)
我也尝试过casting: new_class->devnode = (char *)set_devnode;
或者将 static char *set_devnode 宣告成 char *set_devnode
但是都有相同结果@@
可以请教这个问题是我忽略了什么吗?
作者: hizuki (ayaka)   2018-01-26 16:55:00
第一你C语言要重新看,pointer to function的type不是那样第二上面的代码是无误的才对,请贴出包括编译小稿部分
楼主: drunknmunky   2018-01-26 17:12:00
哈囉 你指的是function pointer吗?我对过都一致啊@@因为没办法我才乱改试试看
作者: james732 (好人超)   2018-01-26 19:27:00
new_class = (struct class *)class_create( ....或者 static struct class *set_devnode(struct device
作者: hizuki (ayaka)   2018-01-27 04:44:00
一是说你描述不对,不是a pointer a char type. 二是指头文件可能指定错了
作者: maydaychaaaa (Halo)   2018-01-27 21:16:00
要 header file include 的问题
作者: yvb   2018-01-29 12:22:00
你的 kernel version 是 3.3 之前吗 ? linux-3.3 以后是char *(*devnode)(struct device *dev, umode_t *mode);^^^^^^^

Links booklink

Contact Us: admin [ a t ] ucptt.com