C++报错,信号的,怎么搞?为什么?

C++报错,为什么啊?有谁懂吗?刚学C++,小白……error: reference to non-static member function must be called signal(SIGALRM,foo);图片说明图片说明

signal函数不能传成员函数foo,因为成员函数实际上还有一个隐含的this指针参数。
可以把foo定义成static的。

首先你要知道signal函数的参数有什么,下面是从http://www.cplusplus.com/reference/csignal/signal/(c++的一个API网站)截图:
图片说明
从图中我们可以看出,signal第二个参数是一个函数,而且参数只能有一个,但是在类的非静态成员函数中,在编译时,编译器都会为它们添加一个this指针作为其第一个参数,所以foo有两个参数,故会报错。代码修改可以按照楼上的方式去修改:

运行环境:vs2015

 #include<iostream>
#include<signal.h>
using namespace std;

class A
{
public:
    static void foo(int signal)
    {
        cout << "aaasf" << endl;
    }
    void bar(void)
    {
        signal(SIGABRT, foo);
        raise(SIGABRT);
    }
};

int main(void)
{
    A a;
    a.bar();
    system("pause");
    return 0;
}

输出结果:

图片说明