Step()
is a non-static member function, so it has an implicit first parameter of type A*
. You need to bind the current instance of A
when invoking it.
mThread = std::make_shared<std::thread>(std::bind(&A::Step, this));
You can also use a lambda instead of bind
mThread = std::make_shared<std::thread>([this]{ Step(); });
As @Casey points out in the comments, std::thread
's constructor has special treatment for pointer to member functions, and will assume the first following argument is a pointer or reference to the instance on which to call the member function. This means you can avoid bind
and directly pass this
as the second argument.
mThread = std::make_shared<std::thread>(&A::Step, this);