0

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:'&':バインドされたメンバー関数式に対する不正な操作

4

1 に答える 1

4

あなたがしたい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
于 2012-10-08T12:20:52.963 に答える