gpt4 book ai didi

c++ - 将函数指针传递给 C++ 中的成员函数。出现错误

转载 作者:行者123 更新时间:2023-11-30 02:22:42 29 4
gpt4 key购买 nike

您好,这是我第一次在 C++ 中传递函数指针。所以这是我的代码:-

#include <iostream>
using namespace std;

// Two simple functions
class student
{
public:
void fun1() { printf("Fun1\n"); }
void fun2() { printf("Fun2\n"); }

// A function that receives a simple function
// as parameter and calls the function
void wrapper(void (*fun)())
{
fun();
}
};

int main()
{ student s;

s.wrapper(s.fun1());
s.wrapper(s.fun2());
return 0;
}

最初在包装函数中我只传递了 fun1 和 fun2。我得到了一个错误

try.cpp:22:15: error: ‘fun1’ was not declared in this scope
s.wrapper(fun1);
^~~~
try.cpp:23:15: error: ‘fun2’ was not declared in this scope
s.wrapper(fun2);

后来我尝试将 s.fun1() 和 s.fun2() 作为参数传递,但再次出错

try.cpp:23:23: error: invalid use of void expression
s.wrapper(s.fun1());
^
try.cpp:24:23: error: invalid use of void expression
s.wrapper(s.fun2());

请帮帮我,我不知道该怎么做:(

最佳答案

让我们来处理帖子中的两个问题。

  1. 您正在调用 fun1fun2。由于它们的返回类型是 void,因此您不能将它们的结果作为值传递。特别是作为函数指针的值。您也无法使用点成员访问运算符获取他们的地址。这给我们带来了以下内容。

  2. 成员函数不像常规函数。你不能只拿他们的地址。它们的处理方式很特殊,因为成员函数只能在对象上 调用。所以它们有一个特殊的语法,涉及它们所属的类。

下面是你做你想做的事情的方式:

class student
{
public:
void fun1() { printf("Fun1\n"); }
void fun2() { printf("Fun2\n"); }

// A function that receives a member function
// as parameter and calls the function
void wrapper(void (student::*fun)())
{
(this->*fun)();
}
};

int main()
{ student s;

s.wrapper(&student::fun1);
s.wrapper(&student::fun2);
return 0;
}

关于c++ - 将函数指针传递给 C++ 中的成员函数。出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46999725/

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