Как связать вызываемую функцию с методом класса

Использование 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: ‘&’: недопустимая операция с выражением связанной функции-члена

0

Решение

Ты хочешь 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
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]