c++类中使用signal函数

例子如下:

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.使用友元函数,这样既能访问类的成员自身又不是类的成员

你可能感兴趣的:(c++)