C2276'&':对绑定成员函数表达式的非法操作

时间:2019-04-12 12:30:34

标签: c++

我想使用指向类JQCollider的构造函数的指针作为参数。但是在构造对象时出现此错误。

在出现错误“非标准语法;使用'&'创建指向成员的指针”之前,我为每个指向成员参数的指针添加了'&'。但是在编译时,我现在得到了这个错误。

class JQCollider
{
public:

    JQCollider()
    {

    }
    JQCollider(FloatRect getBounds(), Vector2f getPos(),void setPos(Vector2f pos))
    {
    getObjPos = getPos;
    getObjBounds = getBounds;
    setObjPos = setPos;
    }

private:

    Vector2f(*getObjPos)();
    FloatRect(*getObjBounds)();
    void(*setObjPos)(Vector2f);

}

class JQTextBox
{
public:
    JQTextBox()
    {
    }

    void Initialize()
    {
    collision = JQCollider(&textBoxSprite.getGlobalBounds, &textBoxSprite.getPosition, &textBoxSprite.setPosition);
    }
private:
    JQCollider collision;
    Sprite textBoxSprite;
}


1 个答案:

答案 0 :(得分:0)

您不能创建指向特定实例的成员函数的函数指针。而是使用std::functionstd::bind

#include <functional>

class JQCollider
{
public:
    JQCollider()
    {}

    JQCollider(std::function<FloatRect>()> getBounds, std::function<Vector2f>()> getPos,
        std::function<void(Vector2f)> setPos)
    {
        getObjPos = getPos;
        getObjBounds = getBounds;
        setObjPos = setPos;
    }

private:
    std::function<Vector2f>()> getObjPos;
    std::function<FloatRect>()> getObjBounds;
    std::function<void(Vector2f)> setObjPos;
}

class JQTextBox
{
public:
    JQTextBox()
    {}

    void Initialize()
    {
        collision = JQCollider(std::bind(&Sprite::getGlobalBounds, textBoxSprite),
            std::bind(&Sprite::getPosition, textBoxSprite),
            std::bind(&Sprite::setPosition, textBoxSprite, std::placeholders::_1));
    }

private:
    JQCollider collision;
    Sprite textBoxSprite;
}