2017-10-12 1 views
0

Ich schreibe ein wirklich einfaches C++ Programm.Fehler: Elementfunktion kann nicht aufgerufen werden 'Forest :: run()' ohne Objekt |

#include<iostream> 
#include<thread> 

class Fortest{ 
private: 
    int x; 
public: 
    Fortest(int a) 
    { 
     x=a; 
    } 
    void run(void) 
    { 
     cout<<"test sucesses!"<<endl; 
    } 
}; 

int main() 
{ 
    Fortest hai(1); 
    std::thread t; 

    t=std::thread(std::ref(hai),&Fortest::run()); 
    t.join(); 

    cout<<"program ends"<<endl; 
    return 0; 
} 

Und ich bekomme ständig den Fehler "kann eine Member-Funktion ohne ein Objekt aufrufen". Könnte mir jemand helfen, dieses Problem zu lösen?

+1

Mögliches Duplikat von [Sta rt thread mit Memberfunktion] (https://stackoverflow.com/questions/10673585/start-thread-with-member-function) – Borgleader

Antwort

2

Sie haben zwei Probleme:

Die erste ist, dass Sie Aufruf die Thread-Funktion, einen Zeiger auf den Wert übergeben Sie zurück. Sie sollten einen Zeiger auf die Funktion übergeben. Das zweite Problem besteht darin, dass Sie die std::thread constructor Argumente in der falschen Reihenfolge übergeben. Der Zeiger auf die Funktion ist das erste Argument, und das Objekt, um es aufzurufen, ist die Sekunde (die das erste Argument für die Funktion ist).

I.e. es sollte so etwas wie

t = std::thread(&Fortest::run, &hai); 
0

Sie rufen es der falsche Weg

Try sein:

Fortest hai(1); 
std::thread t; 

t=std::thread(&Fortest::run, std::ref(hai)); 
t.join(); 

oder dies tun, indem t=std::thread(&Fortest::run, &hai); Überprüfen Sie die Argumente auf std::thread

Live demo

Verwandte Themen