例子如下:
using namespace std;
class test
{
public:
void a()
{
while ( 1 )
signal( SIGINT, change );
}
void change( int sag )
{
cout << "here\n";
}
};
int main()
{
test t;
t.a();
}
这样会报错
error: invalid use of non-static member function
因为signal的函数原型:
void (*signal(int signo , void (*func)(int)))(int);
signo:表示需要处理的信号;
func:是一个指向void funciont(int)类型的函数指针;
返回值:返回值是一个指向void function(int)类型的函数指针。
而调用类中的成员函数隐含了函数前的this指针,所以这样就会造成参数不匹配。
解决方法是:
1.把change()声明成静态函数,静态函数不适用this指针作为隐含参数
2.使用友元函数,这样既能访问类的成员自身又不是类的成员