gpt4 book ai didi

c++ - C++ 中的信号 : using a member function

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:25:22 25 4
gpt4 key购买 nike

我在使用 signal() 时遇到了这个问题:

这段代码编译得很好:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void terminate( int param )
{
printf ( "Terminating program...\n" );
exit( 1 );
}

int main()
{
signal( SIGTERM, terminate );
return 0;
}

但是,下面的代码会抛出这个错误:

g++ -Wall -c -g goober.cpp
goober.cpp: In member function `void GOOBER::yarrgh()':
goober.cpp:5: error: argument of type `void (GOOBER::)(int)' does not match `
void (*)(int)'
make: *** [goober.o] Error 1

goober.h:

#ifndef GOOBER_H
#define GOOBER_H

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

using namespace std;

class GOOBER {
public:
GOOBER(){}
~GOOBER(){}
void yarrgh();
void terminate( int param );
};

#endif

goober.cpp:

#include "goober.h"

void GOOBER::yarrgh()
{
signal( SIGTERM, terminate );
}

void GOOBER::terminate( int param )
{
printf( "Terminating program...\n" );
exit( 1 );
}

驱动.cpp:

#include "goober.h"

using namespace std;

int main()
{
GOOBER G;
G.yarrgh();

return 0;
}

除了我在成员中调用 signal() 之外,我没有看到代码有任何区别。知道哪里出了问题,以及如何解决吗?

最佳答案

您需要将您的terminate() 函数声明为static:

class GOOBER {
// ...
static void terminate(int param);
};

这是因为作为一个非静态成员函数,terminate() 函数需要传递(隐藏的)this 参数以指向物体。由于信号机制不知道这一点(或 C++ 的任何部分),您需要使用 static 函数,这样就没有隐藏的 this 参数。

关于c++ - C++ 中的信号 : using a member function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5670459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com