[問題] incompatible pointer warning

看板LinuxDev作者時間7年前 (2018/01/26 16:21), 7年前編輯推噓1(1011)
留言12則, 5人參與, 7年前最新討論串1/1
在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

01/26 16:55, 7年前 , 1F
第一你C語言要重新看,pointer to function的type不是那樣
01/26 16:55, 1F

01/26 16:56, 7年前 , 2F
第二上面的代碼是無誤的才對,請貼出包括編譯小稿部分
01/26 16:56, 2F

01/26 17:12, 7年前 , 3F
哈囉 你指的是function pointer嗎?我對過都一致啊@@
01/26 17:12, 3F

01/26 17:12, 7年前 , 4F
因為沒辦法我才亂改試試看
01/26 17:12, 4F

01/26 19:27, 7年前 , 5F
new_class = (struct class *)class_create( ....
01/26 19:27, 5F

01/26 19:28, 7年前 , 6F
或者 static struct class *set_devnode(struct device
01/26 19:28, 6F

01/27 04:44, 7年前 , 7F
一是說你描述不對,不是a pointer a char type. 二是指頭
01/27 04:44, 7F

01/27 04:44, 7年前 , 8F
文件可能指定錯了
01/27 04:44, 8F

01/27 21:16, 7年前 , 9F
要 header file include 的問題
01/27 21:16, 9F

01/29 12:22, 7年前 , 10F
你的 kernel version 是 3.3 之前嗎 ? linux-3.3 以後是
01/29 12:22, 10F

01/29 12:22, 7年前 , 11F
char *(*devnode)(struct device *dev, umode_t *mode);
01/29 12:22, 11F

01/29 12:24, 7年前 , 12F
^^^^^^^
01/29 12:24, 12F
感謝樓上幫忙回答的大大 因為是kernel 3.3後 如yvb大大所言 定義變了 更改過已經OK了 ※ 編輯: drunknmunky (60.250.205.229), 01/30/2018 19:42:17
文章代碼(AID): #1QQkKS8N (LinuxDev)
文章代碼(AID): #1QQkKS8N (LinuxDev)