Search code examples
c++c++11pointer-to-memberstdthread

Cannot pass class member-function to another function(std::thread::thread)


Take a look at these 2 codes.

The code below works fine.

void someFunction () {

    // Some unimportant stuff
}

MainM::MainM(QObject *parent) :
    QObject(parent)
{

    std::thread oUpdate (someFunction);

}

This code throws an error:

void MainM::someFunction () {      //as a class member


}


MainM::MainM(QObject *parent) :
    QObject(parent)
{

    std::thread oUpdate (someFunction);

}

Error:

error: no matching function for call to 'std::thread::thread(<unresolved overloaded function type>)'
     std::thread oUpdate (someFunction);
                                     ^

Solution

  • You can't create a pointer-to-member-function by applying & to just the name. You need the fully qualified member: &MainM::someFunction.

    And also bind it to an instance, by passing this, e.g.

    #include <thread>
    
    struct MainM
    {
        void someFunction() {
        }
    
        void main() 
        {
            std::thread th(&MainM::someFunction, this);
        }
    };
    
    int main()
    {
        MainM m;
        m.main();
    }