我有一個通用的一組元素作爲庫提供。C:傳遞函數指針時發生通用ADT錯誤
/** Type for defining the set */
typedef struct Set_t *Set;
/** Element data type for set container */
typedef void* SetElement;
/** Type of function for copying an element of the set */
typedef SetElement(*copySetElements)(SetElement);
要創建集合,我必須提供一個函數指針來處理我打算使用該集合的元素的複製。
Set setCreate(copySetElements copyElement);
我寫了下面的類型和複製功能:
typedef struct location_t {
char *name;
} *Location;
Location locationCopy(Location location){
Location new_location = locationCreate(location->name);
return new_location;
}
*很顯然,我的一切簡化集中討論。
當我打電話:
Set locations = setCreate(locationCopy);
我得到一個編譯器錯誤:
警告:傳遞 'setCreate' 的參數1從兼容的指針 型
預期 'copySetElements',但參數的類型爲'struct location_t *(*)(struct location_t *)'
不要將指針自然隱藏在'typedef'後面,除了函數指針可能除外。它迷惑了每個人,包括你。 –