2012-12-15 33 views
19

Tôi đang cố gắng để sinh ra một thread từ bên trong lớp của tôi và thread thực thi một phương thức cụ thể trong lớp của tôi. Mã này trông như thế này:std :: thread <chưa được giải quyết quá tải loại chức năng> lỗi

class ThreadClass{ 
    int myThread(int arg){ 
    // do something 
    } 

    void createThread(){ 
     thread t = thread(myThread,10); 
    } 

} ; 

Mã này vào biên soạn ném một lỗi nói

std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = int (ThreadClass::*)(int), _Args = {int}] 
no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘int (ThreadClass::*&&)(int)’ 

Tôi không chắc chắn lỗi thực tế ở đây là gì. Ai đó có thể giúp tôi với điều này?

Cảm ơn.

Trả lời

25

Vấn đề là không thể gọi hàm thành viên mà không có đối tượng. Cung cấp một con trỏ đến this để các đối tượng hiện nay được sử dụng:

thread t(&ThreadClass::myThread, this, 10); 

Bạn có thể sử dụng một thể hiện của bất kỳ đối tượng ThreadClass, nhưng trong trường hợp của bạn, có vẻ như this là điều phải làm.

LƯU Ý: Hãy nhớ rằng bạn cần tham chiếu đến chuỗi đã tạo để bạn có thể thực hiện join() sau này.

+0

Bạn cần tham chiếu đến chuỗi đã tạo nếu bạn cần thực hiện tham gia() sau này. –

+0

Cảm ơn Nick. Điều đó đã hiệu quả! – CPS

Các vấn đề liên quan