2014-01-20 13 views
1

我需要用cpp編譯器編譯一些較舊的c數據採集代碼。我使用signal()遇到了麻煩。使用signal.h無效的轉換錯誤,必須將舊的c代碼編譯爲cpp

目前,我有以下幾點:

signal(SIGINT, close_datalog); 
signal(SIGTERM, close_datalog); 

隨着close_datalog(),定義方式如下:

​​

我遇到下面的錯誤,當我嘗試使用我的makefile編譯程序:

g++ -c -o xdatalog.o xdatalog.cpp 
xdatalog.cpp: In function ‘int main(int, char**)’: 
xdatalog.cpp:108:26: error: invalid conversion from ‘void (*)()’ to ‘__sighandler_t {aka void (*)(int)}’ [-fpermissive] 

任何幫助將不勝感激。我對cpp相當陌生。

回答

0

由錯誤信息來看,這將是足以只是改變簽名

void close_datalog(int /*exit_code*/) 
{ 
// .... 
} 

它想要的功能接受INT。

+0

謝謝!這似乎工作。這可能是一個愚蠢的問題,但爲什麼這在cpp而不是在c? – user3216648

+0

我不是100%確定的,但它似乎像無效(​​)()無效(*)(INT)不符合標準,但由一些編譯器支持 - 它也可能工作在C + +,如果你設置一個標誌,看看http://stackoverflow.com/questions/8843818/what-does-the-fpermissive-flag-do –