Использование MS VC ++ 2012 и библиотеки Boost 1.51.0
Это снимок моей проблемы:
struct B {
C* cPtr;
}
struct C {
void callable (int);
}
void function (B* bPtr, int x) {
// error [1] here
boost::thread* thrPtr = new boost::thread(bPtr->cPtr->callable, x)
// error [2] here
boost::thread* thrPtr = new boost::thread(&bPtr->cPtr->callable, x)
}
[1] ошибка C3867: ‘C :: callable’: отсутствует список аргументов при вызове функции; использовать&C :: callable ‘для создания указателя на член
[2] ошибка C2276: ‘&’: недопустимая операция с выражением связанной функции-члена
Ты хочешь boost::thread* thrPtr = new boost::thread(&C::callable, bPtr->cPtr, x);
, Вот рабочий пример:
#include <sstream>
#include <boost/thread.hpp>
#include <boost/bind.hpp>struct C {
void callable (int j)
{ std::cout << "j = " << j << ", this = " << this << std::endl; }
};
struct B {
C* cPtr;
};
int main(void)
{
int x = 42;
B* bPtr = new B;
bPtr->cPtr = new C;
std::cout << "cPtr = " << bPtr->cPtr << std::endl;;
boost::thread* thrPtr = new boost::thread(&C::callable, bPtr->cPtr, x);
thrPtr->join();
delete thrPtr;
}
Образец вывода:
cPtr = 0x1a100f0
j = 42, this = 0x1a100f0
Других решений пока нет …