C中的信号:使用成员函数
发布时间:2020-12-16 06:48:53 所属栏目:百科 来源:网络整理
导读:我有signal()的这个问题: 这段代码很好编译: #include stdio.h#include stdlib.h#include signal.hvoid terminate( int param ){ printf ( "Terminating program...n" ); exit( 1 );}int main(){ signal( SIGTERM,terminate ); return 0;} 但是,以下代码
我有signal()的这个问题:
这段代码很好编译: #include <stdio.h> #include <stdlib.h> #include <signal.h> void terminate( int param ) { printf ( "Terminating program...n" ); exit( 1 ); } int main() { signal( SIGTERM,terminate ); return 0; } 但是,以下代码会引发此错误: g++ -Wall -c -g goober.cpp goober.cpp: In member function `void GOOBER::yarrgh()': goober.cpp:5: error: argument of type `void (GOOBER::)(int)' does not match ` void (*)(int)' make: *** [goober.o] Error 1 goober.h: #ifndef GOOBER_H #define GOOBER_H #include <stdio.h> #include <stdlib.h> #include <signal.h> using namespace std; class GOOBER { public: GOOBER(){} ~GOOBER(){} void yarrgh(); void terminate( int param ); }; #endif goober.cpp: #include "goober.h" void GOOBER::yarrgh() { signal( SIGTERM,terminate ); } void GOOBER::terminate( int param ) { printf( "Terminating program...n" ); exit( 1 ); } driver.cpp: #include "goober.h" using namespace std; int main() { GOOBER G; G.yarrgh(); return 0; } 我没有看到代码中的任何差异,除了我在成员中调用signal().任何想法有什么不对,以及如何解决它? 解决方法
您需要将terminate()函数声明为static:
class GOOBER { // ... static void terminate(int param); }; 这是因为作为非静态成员函数,terminate()函数期望传递(隐藏)此参数以指向该对象的某个实例.由于信号机制不知道这个(或者关于C的任何东西),你需要使用静态函数,这样就没有隐藏的这个参数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |