2014-05-30 2 views
7

Я пытаюсь начать нить с помощью shared_ptr из класса Test, и я получаю эту ошибку:Компилятор ошибок с использованием станд :: shared_ptr с станд :: нить

/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include/g++-v4/functional:559:2: note: no known conversion for argument 1 from 'std::shared_ptr<Test>' to 'std::shared_ptr<Test>&'

Пример кода:

std::shared_ptr<Test> test = std::make_shared<Test>(); 
    std::thread th(&Test::run, test); // Compiler error 


    Test* test2 = new Test; 
    std::thread th(&Test::run, test2); // okay 

Примечание: В окнах с VS2013 отлично работает первый пример.

+2

Это выглядит как ошибка в версии GCC вы используете. «Std :: thread th (std :: bind (& Test :: run, test)) работает лучше (возможно, нет, поскольку они могут использовать некоторый общий внутренний код). –

+0

[Как странно] (http://coliru.stacked-crooked.com/a/d6618c69f8e3134b) ... –

+0

std :: bind работает нормально! Благодарю. – davidaristi

ответ

3

Это похоже на ошибку в версии gcc, которую вы используете, так как она должна работать. И, глядя на http://ideone.com/GOQ35M он работает

В качестве обходного пути, вы можете попробовать

std::shared_ptr<Test> test = std::make_shared<Test>(); 
std::thread th(std::bind(&Test::run, test)) 
Смежные вопросы