2013-09-18 3 views
2

Взгляните на эти 2 кода.Невозможно передать функцию-член класса другой функции (std :: thread :: thread)

Код ниже работает нормально.

void someFunction() { 

    // Some unimportant stuff 
} 

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

    std::thread oUpdate (someFunction); 

} 

Этот код выдает ошибку:

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


} 


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

    std::thread oUpdate (someFunction); 

} 

Ошибка:

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

возможно дубликат [Начать нить с функцией члена] (http://stackoverflow.com/questions/10673585/start-thread-with-member-function) - вы даже попытаться искать существующий ответ? –

+0

@JonathanWakely Это, извините. Это не ТОЛЬКО std :: thread related, поэтому ... – khajvah

ответ

8

Вы не можете создать указатель на член-функцию путем применения & к просто имя. Вам нужен полностью квалифицированный член: &MainM::someFunction.

А также свяжите его с экземпляром, пройдя this, например.

#include <thread> 

struct MainM 
{ 
    void someFunction() { 
    } 

    void main() 
    { 
     std::thread th(&MainM::someFunction, this); 
    } 
}; 

int main() 
{ 
    MainM m; 
    m.main(); 
} 
Смежные вопросы