c++類中使用signal函式
阿新 • • 發佈:2019-01-31
例子如下:
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.使用友元函式,這樣既能訪問類的成員自身又不是類的成員