C ++ 11 Инициализация потока с ошибкой компиляции функций-членов [duplicate]

На этот вопрос уже есть ответ:

Начать тему с функцией-члена 5 ответов

Я только начинаю использовать потоки C ++ 11 и борюсь с (возможно, глупой) ошибкой. Это мой пример программы:

#include <iostream>
#include <thread>
#include <future>
using namespace std;

class A {
public:
  A() {
    cout << "A constructor\n";
  }

  void foo() {
    cout << "I'm foo() and I greet you.\n";
  }

  static void foo2() {
    cout << "I'm foo2() and I am static!\n";
  }

  void operator()() {
    cout << "I'm the operator(). Hi there!\n";
  }
};

void hello1() {
  cout << "Hello from outside class A\n";
}

int main() {
  A obj;
  thread t1(hello1); //  it works
  thread t2(A::foo2); // it works
  thread t3(obj.foo); // error
  thread t4(obj);     // it works

  t1.join();
  t2.join();
  t3.join();
  t4.join();
  return 0;
}

Можно ли начать поток с чистой функции-члена? Если это не так, как я могу обернуть мой Foo функция от объекта OBJ чтобы создать такую тему? Заранее спасибо

Это ошибка компиляции:

thread_test.cpp: в функции int main () ’: thread_test.cpp: 32: 22: ошибка: отсутствует функция сопоставления для вызова callstd :: thread :: thread ()’

thread_test.cpp: 32: 22: примечание: кандидаты:

/ usr / include / c ++ / 4.6 / thread: 133: 7: примечание: std :: thread :: thread (_Callable &&, _Args && ...) [with _Callable = void (A :: *) (), _Args = { }]

/ usr / include / c ++ / 4.6 / thread: 133: 7: примечание: неизвестное преобразование для аргумента 1 из ‘’ в ‘void (A :: * &&) ()’

/ usr / include / c ++ / 4.6 / thread: 128: 5: note: std :: thread :: thread (std :: thread &&)

/ usr / include / c ++ / 4.6 / thread: 128: 5: примечание: неизвестное преобразование для аргумента 1 из ‘’ в ‘std :: thread &&’

/ usr / include / c ++ / 4.6 / thread: 124: 5: note: std :: thread :: thread ()

/ usr / include / c ++ / 4.6 / thread: 124: 5: примечание: кандидат ожидает 0 аргументов, 1 предоставлено

Ответы на вопрос(1)

Ваш ответ на вопрос