C++类成员指针指向全局函数

6

我希望有一个类,其中一个成员是指向函数的指针。

以下是函数指针:

typedef double (*Function)(double);

这里有一个符合函数指针定义的函数:

double f1(double x)
{
    return 0;
}

以下是类的定义:

class IntegrFunction
{
public:
    Function* function;
};

在主函数中的某个地方,我想要做这样的事情:

IntegrFunction func1;
func1.function = f1;

但是,这段代码不起作用。

是否可能将全局函数的函数指针分配给类成员,如上所述?还是我需要更改函数指针定义中的一些内容?

谢谢。


它是以什么方式没有工作? - Dennis Zickefoose
它为什么“不工作”?你是否收到编译器错误?如果是,那是什么? - Billy ONeal
如果您能提供一个完整的示例,我们可能会更容易找到答案。您已经非常接近了,只需要再写几行代码就可以完成了。此外,您能告诉我们“不起作用”是什么意思吗?您是否从编译器或链接器中得到错误信息?您是否得到了与预期不同的运行时行为? - Robᵩ
5个回答

9

请替换这个:

class IntegrFunction
{
public:
    Function* function;
};

使用以下方法:

class IntegrFunction
{
public:
    Function function;
};

你的typedef已经创建了一个函数指针。声明 Function* function 创建了一个指向指针的函数指针。


谢谢,我明白了我的错误,现在我的代码可以工作了。下次我应该更加小心。 - Alina Danila

4

只需替换

Function* function;

为了

Function function;

2

您将变量声明为Function* function,但是Function typedef已经是指针的typedef。因此,函数指针的类型只是Function(不带*)。


0

替换

typedef double (*Function)(double);

typedef double Function(double);

使用typedef来定义函数类型,然后在使用时可以写上*


-3
你需要在标准C++03中使用“地址取值运算符”来获取函数指针。
func1.function = &f1;

2
不需要。在获取成员函数的地址时,&是必需的,但对于非成员函数则不需要。 - James McNellis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接