1. 程式人生 > >c++類中使用signal函式

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.使用友元函式,這樣既能訪問類的成員自身又不是類的成員