线程 - 没有匹配的函数来调用

时间:2016-12-11 19:25:58

标签: c++ multithreading c++11

我有一个名为send

的函数
void send ( mutex *m,
            socklen_t addr_size, 
            sockaddr_storage serverStorage,
            double PLP ,
            int size_of_file ,
            char ** char_file , 
            int *total ,
            int *next_seq_to_send ,
            int *base_seq , 
            int client_socket , 
            int *window_size ,  
            vector <packet> *window_buffer , 
            vector <bool> *wind_slots )

我想用这个函数创建一个这样的线程

std::thread send_thread (send, &m ,addr_size, 
                         serverStorage, PLP , size_of_file,
                         char_file , &total,
                         &next_seq_to_send,  
                         &base_seq, client_socket,   
                         &window_size,&window_buffer, 
                         &wind_slots );

但我收到了错误

no matching function for call to ‘std::thread::thread(<unresolved overloaded function type>, std::mutex*, socklen_t&, sockaddr_storage&, double&, int&, char*&, int*, int*, int*, int&, int*, std::vector<packet>*, std::vector<bool>*)’
 rage, PLP , size_of_file , char_file , &total , &next_seq_to_send , &base_seq , client_socket , &window_size , &window_buffer , &wind_slots );
                                                                                                                                             ^

任何帮助?

1 个答案:

答案 0 :(得分:2)

当需要通过引用将对象传递给线程函数(或类似情况)时,使用

std::ref但这不是你的情况;该函数不接受引用,它接受指针(并按值获取)。只需将std::ref(x)的所有用途更改为&x即可获取参数的地址,您应该做得很好。