看板 LinuxDev 關於我們 聯絡資訊
在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 但是都有相同結果@@ 可以請教這個問題是我忽略了什麼嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.205.229 ※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1516954908.A.217.html
hizuki: 第一你C語言要重新看,pointer to function的type不是那樣 01/26 16:55
hizuki: 第二上面的代碼是無誤的才對,請貼出包括編譯小稿部分 01/26 16:56
drunknmunky: 哈囉 你指的是function pointer嗎?我對過都一致啊@@ 01/26 17:12
drunknmunky: 因為沒辦法我才亂改試試看 01/26 17:12
james732: new_class = (struct class *)class_create( .... 01/26 19:27
james732: 或者 static struct class *set_devnode(struct device 01/26 19:28
hizuki: 一是說你描述不對,不是a pointer a char type. 二是指頭 01/27 04:44
hizuki: 文件可能指定錯了 01/27 04:44
maydaychaaaa: 要 header file include 的問題 01/27 21:16
yvb: 你的 kernel version 是 3.3 之前嗎 ? linux-3.3 以後是 01/29 12:22
yvb: char *(*devnode)(struct device *dev, umode_t *mode); 01/29 12:22
yvb: ^^^^^^^ 01/29 12:24
感謝樓上幫忙回答的大大 因為是kernel 3.3後 如yvb大大所言 定義變了 更改過已經OK了 ※ 編輯: drunknmunky (60.250.205.229), 01/30/2018 19:42:17