C2276 '&':对绑定成员函数表达式的非法操作
C2276 '&': illegal operation on bound member function expression
我想将指向我的类 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;
}
不能创建指向特定实例的成员函数的函数指针。相反,请使用 std::function 和 std::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;
}
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- "class":非法使用此类型作为表达式 如何解决?
- 在 C++ 中的 lambda 表达式中非法捕获
- 调用模板类成员时非法使用此类型作为表达式
- C2276 '&':对绑定成员函数表达式的非法操作
- 排序测试模板化函数 lambda:非法使用此类型作为表达式
- 错误 C2275 RHandle:非法使用此类型作为表达式
- '&' :对绑定成员函数表达式的非法操作
- 错误:非法使用此类型作为表达式.C++
- LAMBDA 错误:类型 'void' 的条件表达式是非法的
- 为什么double v2=((double)51/4)%2是非法表达式ni c++
- "&":对绑定成员函数表达式的非法操作。从关键点矢量 OpenCV 获取容量
- 非法使用type作为表达式
- 无法在VS 14 CTP中使用auto声明lambda:类型为'void'的条件表达式是非法的
- std::string:将此类型非法用作表达式
- "!"绑定成员函数表达式的非法操作
- 奇怪的错误 C2275 ..非法使用此类型作为成员函数模板和 lambda 的表达式
- 非法使用此类型作为表达式(错误)c++
- 非法使用此类型作为表达式- VS 2012