2012-03-21 2 views
0

Я пытаюсь запустить следующую программу, используя boost :: thread.boost :: thread compilation error

#include <boost/thread.hpp> 
#include <iostream> 

using namespace std; 

class test{ 
public: 
    void hello(int i) 
    { 
    cout << i << " "; 
    }; 
}; 

int main(int argc, char* argv[]) 
{ 
    class test t; 
    boost::thread thrd(t.hello, 10); 
    thrd.join(); 
    return 0; 
} 

Он бросает ошибку во время компиляции, как указано ниже:

thread.c:17:33: error: no matching function for call to 'boost::thread::thread(, int)' /usr/include/boost/thread/detail/thread.hpp:236:9: note: candidates are: boost::thread::thread(F, A1) [with F = void (test::*)(int), A1 = int] /usr/include/boost/thread/detail/thread.hpp:202:9: note:
boost::thread::thread(boost::detail::thread_move_t)

Я использую подталкивание 1,42. Я также пробовал создание старого стиля boost :: thread.

Когда hello() не является функцией класса, все идет хорошо. Пожалуйста, дайте мне знать, как я могу это исправить?

ответ

1

Проблема вы пытаетесь привязать к функции члена, попробуйте следующее (я не ваше подталкивание версия так понятий не имеет, если это работает точно)

boost::thread thrd(&test::hello, &t, 10); 

в противном случае вы можете использовать связующий

boost::thread thrd(
    boost::bind(&test::hello, &t, 10)); 

Если ваш компилятор является достаточно новым, вы можете использовать стандартные эквиваленты библиотек для всех из них, изменив пространство имен boost для std :: (placeholder находится в std :: placeholders, а не в глобальном пространстве имен).

std::thread(... //c++11 
+0

первое предложение работа ... спасибо за ответ. –

+0

@AkashAgrawal Да, это работает именно на моем, только 1.42 сейчас отчасти старый, рад быть полезным братом. – 111111

2

Вы не читали documentation.

Вам либо нужно сделать функцию hello статический метод, или создать поток, передавая объект испытания типа в это конструктор:

int main(int argc, char* argv[]) 
{ 
    test t; 
    boost::thread thrd(&test::hello, &t, 10); 
    thrd2.join(); 
} 
+0

Да, я проверил его статической функции функции перед отправкой на вопрос, и они, очевидно, будет работать. Не удалось запустить с нестатической функцией. Спасибо за ваш ответ, попробуем это. –

0

Попробуйте с этим кодом:

int main(int argc, char* argv[]) 
{ 
    test t; 
    boost::thread thrd(&test::hello,&t,10); 
    thrd.join(); 
    return 0; 
}