gpt4 book ai didi

c++ - 非静态成员函数c++的无效使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:08 27 4
gpt4 key购买 nike

我正在关注这个example .但是当我编译时,它返回一个错误:

Invalid use of non-static member function

在线

void(Machine:: *ptrs[])() = 
{
Machine::off, Machine::on
};

我试图在类里面将 static 添加到 void on();

class Machine
{
class State *current;
public:
Machine();
void setCurrent(State *s)
{
current = s;
}
static void on(); // I add static here ...
static void off(); // and here
};

但是它提示说

Invalid use of member Machine::current in static member function

你能帮我解决这个问题吗?

最佳答案

与静态成员函数或自由函数不同,非静态成员函数不会implicitly convert到成员函数指针。

(强调我的)

An lvalue of function type T can be implicitly converted to a prvalue pointer to that function. This does not apply to non-static member functions because lvalues that refer to non-static member functions do not exist.

因此您需要显式地使用& 来获取非静态成员函数的地址(即获取非静态成员函数指针)。例如

void(Machine:: *ptrs[])() = 
{
&Machine::off, &Machine::on
};

如果将它们声明为静态成员函数,则应更改ptrs 的类型(改为非成员函数指针数组)。请注意,对于静态成员函数,不显式使用 & 是可以的。例如

void(*ptrs[])() = 
{
Machine::off, Machine::on
};

关于c++ - 非静态成员函数c++的无效使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41326376/

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