Welcome to the next pikoTutorial!
The error we're handling today is a C++ compilation error:
invalid use of non-static member function
What does it mean?
It often occurs when the compiler encounters a place in the code where it would normally expect a static member function, but the actual function is not static. Let's say for example, that we have a function which takes a function pointer to some other function and calls it:
void RunFunction(void (*func)()) { func(); }
If you create a SomeClass
class with a non-static Run
function and try to pass it to the RunFunction
function using the range operator like below:
struct SomeClass { void Run() { std::cout << "Running..." << std::endl; } }; int main() { RunFunction(SomeClass::Run); }
the compiler will throw an error:
error: invalid use of non-static member function ‘void SomeClass::Run()’
How to fix it?
The easiest way is to just make Run
function static, by adding static
keyword to its definition:
static void Run()
However, if you can't make that function static, you would have to adjust the RunFunction
function to accept some callable object instead of a raw function pointer:
void RunFunction(std::function<void()> func) { func(); }
And bind SomeClass::Run
function to a specific object instance using std::bind
:
SomeClass instance; RunFunction(std::bind(&SomeClass::Run, instance));
Or a simple lambda:
SomeClass instance; RunFunction([&instance]{ instance.Run(); });
Top comments (0)