2015-05-12 2 views
2

Я пытаюсь создать поток с использованием std::async, но продолжаю получать ошибку " нет функции согласования для вызова «async(std::launch, <unresolved overloaded function type>, std::string&)»»на линии«нет подходящей функции для вызова« async »(std :: launch, <неразрешенный перегруженный тип функции>, std :: string &) '"

ConnectFuture = std::async(std::launch::async, Connect_T,ip); 

Здесь пока код, который производит такое поведение:

#include <future> 

class libWrapper 
{ 
public: 

    void Connect(std::string ip); 
    void Connect_T(std::string ip); 

private: 

    std::future<void> ConnectFuture; 
}; 



void libWrapper::Connect(std::string ip){ 

    auto status = ConnectFuture.wait_for(std::chrono::seconds(0)); 
    if (status != std::future_status::timeout) 
    { 
     ConnectFuture = std::async(std::launch::async, Connect_T,ip); 

    } 
} 

void libWrapper::Connect_T(std::string ip) 
{ 


} 

int main(int argc, char** argv) { 
    libWrapper lW; 
    lW.Connect("192.168.3.1"); 
    return 0; 
} 
+0

Вы действительно получаете '<неразрешенный перегруженный тип функции>'? Я получаю ссылку на нестационарную функцию-член, которая должна быть вызвана из clang и 'недопустимое использование нестатической функции-члена' из gcc, что имеет смысл. – Barry

+0

да, вот мой вызов компилятора: g ++ -O0 -g3 -Wall -c -fmessage-length = 0 -std = C++ 11 -MMD -MP -MF "src/test2.d" -MT "src/test2.d "-o" src/test2.o "" ../src/test2.cpp " –

ответ

6

это функция, поэтому она нуждается в объекте, чтобы быть вызвана а также аргумент. Может быть, это должно быть статическим, или, может быть, вы должны привязать его к this:

std::async(std::launch::async, &libWrapper::Connect_T, this, ip) 
+0

Nice !! оба решения работали. Я добавил static: static void Connect_T (std :: string ip); –

 Смежные вопросы

  • Нет связанных вопросов^_^