3
TL:DR;當編譯一個曾經是C++的項目時,我得到這個錯誤error: initializing argument 2 of 'int SocketSrv(int, int (*)(), int*, int, int, int)'
。該程序在沒有警告的情況下編譯爲C代碼。遷移Ç - > C++函數指針拋出編譯器錯誤
的代碼是:
rtn=SocketSrv(RxServConfig->port_nbr1, fn, &RxDataSocketId,
RxServConfig->max_children,
RxServConfig->shmemkey,
RxServConfig->semkey);
的問題是,我們給一個指向函數int function (int)
給需要int function()
的功能。
我甚至不有一個想法,爲什麼這個工作在C和我在被調用函數沒有訪問代碼。
問題:我可以以某種方式投int (*)(int)
到int (*)()
?再次說明「爲什麼這樣做有用?」指向的函數實際上使用參數,即使我們聲明瞭一個沒有參數的函數指針,C是否沿着參數傳遞?
有趣,絕對給了我更多的研究的起點。它在一個塊中調用了分配給函數指針的幾個不同的函數,我必須弄清楚它們是否都具有相同的簽名,然後寫入一個包裝器。我想在C++中不可能有非特定數量的參數?將它改爲void指針會改變事物嗎? – xyious
@xyious你可以嘗試的reinterpret_cast(F),如果你確信傳遞的指針有正確的類型,問題是在調用的函數 –
@xyious也許它可以工作工作,你們有兩個想法的聲明,但記得要小心並避免*未定義的行爲*。 –