2014-11-01 158 views
1

我收到指出「‘富’聲明函數返回一個函數」,因爲在我的程序行的編譯錯誤:誤差函數指針返回(無效*)

typedef void * (* foo)(void *)(int); 

其中foo是一個指向函數的函數指針,該函數需要(void *)類型和和int並返回(void *)類型。據我所知,上面的聲明不是返回一個函數,而是一個指針。在這種情況下使用typedef是否有問題?這個函數指針與我一直使用的其他函數指針之間的唯一區別是(void *)參數,所以我假設問題與此有關。我在linux機器上使用gcc。

感謝您的幫助!

回答

4

您的聲明是錯誤的。該錯誤消息是有道理的,因爲foo,因爲你寫的,被宣佈爲「函數指針接收void *並返回接收int並返回void *的函數類型別名。

如果函數接收void *和一個int,你應該有這個代替:

typedef void *(*foo)(void *, int); 

這基本上轉化爲「讓富表示類型函數指針接收void *int並返回一個void *

+0

完美,謝謝!我不知道爲什麼我認爲每個參數都必須用()來封裝,而不是用「,」分隔。 – 2014-11-01 21:21:52