gpt4 book ai didi

c++ - 指向类组合中成员函数的指针

转载 作者:行者123 更新时间:2023-11-30 02:34:33 26 4
gpt4 key购买 nike

我有两个类,FooBarFoo 类包含一个名为 bBar 实例,类 Bar 需要访问成员函数 FooFuncFoo。函数 FooFunc 执行一些算术运算,但现在我只想尝试传递它,但我似乎无法使以下 MWE(名为 scratch.cpp)工作:

#include <iostream>

class Foo; // forward declaration

class Bar
{
public:
Bar() {}
void BarFunc(double (Foo::*func)(double))
{
std::cout << "In BarFunc \n";
}
};

class Foo // must be declared after Bar, else incomplete type
{
public:
Foo() {}
Bar b;

double FooFunc(double x)
{
return x + 1;
}
void CallBarFunc()
{
b.BarFunc(FooFunc); // error occurs here
}
};

int main()
{
Foo f;
f.CallBarFunc();
}

我得到的错误是

scratch.cpp:27:22: error: no matching function for call to ‘Bar::BarFunc(<unresolved overloaded function type>)’
scratch.cpp:27:22: note: candidate is:
scratch.cpp:9:8: note: void Bar::BarFunc(double (Foo::*)(double))
scratch.cpp:9:8: note: no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘double (Foo::*)(double)’

最佳答案

与衰减为函数指针的非成员函数不同,非static 成员函数不会衰减为指针。

代替:

     b.BarFunc(FooFunc);

使用:

     b.BarFunc(&Foo::FooFunc);

关于c++ - 指向类组合中成员函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34487954/

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