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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值