gpt4 book ai didi

c++ - 你如何将一个类的函数作为参数传递给同一个类的另一个函数

转载 作者:行者123 更新时间:2023-11-30 01:31:11 25 4
gpt4 key购买 nike

我基本上想使用 dif 函数来提取类 (ac) 的不同元素。

代码类似这样:

.h:

class MyClass
{
public:
double f1(AnotherClass &);
void MyClass::f0(AnotherClass & ac, double(MyClass::*f1)(AnotherClass &));
};

.cc:

double MyClass::f1(AnotherClass & ac)
{
return ac.value;
}

void MyClass::f0(AnotherClass & ac, double(MyClass::*f1)(AnotherClass &))
{
std::cout << f1(ac);
}

没有用,它给出了错误#547“获取成员函数地址的非标准形式”

编辑:

我称之为:

void MyClass(AnotherClass & ac)
{
return f0(ac,&f1); // original and incorrect
return f0(ac,&Myclass::f1); //solved the problem
}

但是,我有另一个错误:

std::cout << f1(ac); 
^ error: expression must have (pointer-to-) function type

最佳答案

看看错误点在哪里。我敢打赌它不在函数声明行上,而是在你如何调用它上。

观察:

struct foo
{
void bar(void (foo::*func)(void));
void baz(void)
{
bar(&foo::baz); // note how the address is taken
bar(&baz); // this is wrong
}
};

您收到错误消息是因为您错误地调用了该函数。鉴于我上面的 foo,我们知道这是行不通的:

baz(); // where did the foo:: go?

因为 baz 需要调用一个实例。你需要给它一个(我假设 this):

std::cout << (this->*f1)(ac);

语法有点奇怪,但是这个运算符->*说:“取右边的成员函数指针,用左边的实例调用它。” (还有一个 .* 运算符。)

关于c++ - 你如何将一个类的函数作为参数传递给同一个类的另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3506234/

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