2

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);
                                     ^
2
  • possible duplicate of Start thread with member function - did you even try searching for an existing answer? Commented Sep 18, 2013 at 19:52
  • @JonathanWakely It is, sorry. It is not ONLY std::thread related, so... Commented Sep 18, 2013 at 20:08

1 Answer 1

8

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();
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.