gpt4 book ai didi

c++ - 函数指针 typedef - 表达式必须是可修改的左值错误

转载 作者:行者123 更新时间:2023-11-28 00:00:59 28 4
gpt4 key购买 nike

我有一个函数指针的 typedef,我正在尝试创建一个函数指针并让它指向同一类的成员函数:

typedef void(Controls::*KeyFunction)(void);

class Controls
{
public:
void OnKeyDown(Key key);

// Key Down Functions
void KeyLeftDown();
void KeyRightDown();
void KeyDownDown();
void KeyUpDown();
private:
static BOOL KeyEvent(LPARAM keyFunc, WPARAM null, UINT flags);
};

void Controls::OnKeyDown(Key key)
{
KeyFunction kFunc;
switch (key)
{
case Key::Left:
kFunc = KeyLeftDown;
break;
case Key::Right:
kFunc = KeyRightDown;
break;
case Key::Up:
kFunc = KeyUpDown;
break;
case Key::Down:
kFunc = KeyDownDown;
break;
default:
return;
}
SendKeyEvent(kFunc, DO_NOT_REMOVE);
}

BOOL Controls::KeyEvent(LPARAM keyFunc, WPARAM null, UINT flags)
{
KeyFunction func = (KeyFunction)(keyFunc);
func();
return TRUE;
}

使用 typedef 'KeyFunction' 总是给出表达式必须是可修改的左值的错误。但是,如果我只使用定义本身并跳过 typedef,它就可以工作。例如:

void(Controls::*kFunc)(void);
switch (key)
{
case Key::Left:
kFunc = KeyLeftDown;
break;
}

完全有效???我做错了什么?

谢谢

最佳答案

您需要使用正确的语法来获取指向成员函数的指针:

kFunc = &Controls::KeyLeftDown;

关于c++ - 函数指针 typedef - 表达式必须是可修改的左值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38983586/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com