Boost :: Ошибка компиляции потока - PullRequest
0 голосов
/ 21 марта 2012

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

#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: ошибка: нет подходящей функции для вызова 'boost :: thread :: thread (, int)' /usr/include/boost/thread/detail/thread.hpp:236:9: примечание: кандидаты: boost:: thread :: thread (F, A1) [с F = void (test :: *) (int), A1 = int] /usr/include/boost/thread/detail/thread.hpp:202:9: примечание:
boost :: thread :: thread (boost :: detail :: thread_move_t)

Я использую Boost 1.42.Я также попробовал создание старого стиля Boost :: Thread.

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

Ответы [ 3 ]

2 голосов
/ 21 марта 2012

Вы не читали документацию .

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

int main(int argc, char* argv[])
{
  test t;
  boost::thread thrd(&test::hello, &t, 10);
  thrd2.join();
}
1 голос
/ 21 марта 2012

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

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

Если вы не можетеиспользуйте связыватель

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

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

std::thread(... //c++11
0 голосов
/ 21 марта 2012

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

int main(int argc, char* argv[])
{
  test t;
  boost::thread thrd(&test::hello,&t,10);
  thrd.join();
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...