Beware that Signals are not threadsafe, so you might not want to reconsider this if necesarry
– Robert GouldDec 5 '08 at 8:55

The reason you need to use a static method (as described below), is that to call a method you need an instance of the class (an object). There is no way to pass an object to signal so it must be a normal function pointer (not a method pointer).
– Martin YorkDec 5 '08 at 17:27

6 Answers
6

The second parameter of signal should be a pointer to a function accepting an int and returning void. What you're passing to signal is a pointer to a member function accepting an int and returning void (its type being void (myClass::*)(int)). I can see three possibilities to overcome this issue:

1 - Your method myHandler can be static: this is great, make it static

2 - Your method shouldn't be static: if you're planning to use signal with only one instance, you can create a private static object, and write a static method that simply call the method on this object. Something along the lines of

3 - However, if you're planning on using the signal with multiple instances, things will get more complicated. Perhaps a solution would be to store each instance you want to manipulate in a static vector, and invoking the method on each of these :

Actually, C++ signal handlers are not permitted to use any facilities not present in both C and C++ (except that in C++11 they may use atomics), and are required to use C linkage. Quoting C++11 draft n3242 section 18.10 "Other runtime support" [support.runtime] (paragraph 8),

The common subset of the C and C++ languages consists of all declarations,
definitions, and expressions that may appear in a well formed C++ program
and also in a conforming C program. A POF (“plain old function”) is a
function that uses only features from this common subset, and that does not
directly or indirectly use any function that is not a POF, except that it
may use functions defined in Clause 29 that are not member functions. All
signal handlers shall have C linkage. A POF that could be used as a signal
handler in a conforming C program does not produce undefined behavior when
used as a signal handler in a C++ program. The behavior of any other function
used as a signal handler in a C++ program is implementation-defined.

It does seem crazy that you can post new answers with less reputation than it takes to comment on existing ones, but there we go.

gekomad's answer from Sept 24 2015 was the one that I used to solve my problem. It is worth pointing out that this will only work completely obviously when there is only ever one instance of myClass created. otherwise, the static object pointer will point to one of the instances (the most recently created) which may not be the desired one.

And, in case it is useful to someone else, a valid 2018 URL for the FAQ question linked in a couple of the answers is: