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;
}
输出结果: