[問題] 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