【问题标题】:C++ class member pointer to global function指向全局函数的 C++ 类成员指针
【发布时间】:2011-08-25 16:33:50
【问题描述】:

我想要一个类,它有一个指向函数的指针作为成员

这里是函数指针:

typedef double (*Function)(double);

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

double f1(double x)
{
    return 0;
}

这是类定义:

class IntegrFunction
{
public:
    Function* function;
};

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

IntegrFunction func1;
func1.function = f1;

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

是否可以为类成员分配一个指向全局函数的函数指针,如上所述?还是我必须更改函数指针定义中的某些内容?

谢谢,

【问题讨论】:

  • 在什么情况下不起作用?
  • 它是如何“不工作”的?你得到一个编译器错误吗?如果有,是什么?
  • 如果您提供一个完整的示例,我们可能更容易找到答案。您已经如此接近了,只需多写几行即可完成。另外,您能告诉我们您所说的“不起作用”是什么意思吗?您是否从编译器中收到错误消息?链接器?您的运行时行为是否与您的预期不同?

标签: c++ class function-pointers global


【解决方案1】:

替换这个:

class IntegrFunction
{
public:
    Function* function;
};

用这个:

class IntegrFunction
{
public:
    Function function;
};

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

【讨论】:

  • 谢谢,我理解我的错误,我的代码现在可以工作了。下次我应该更加小心。
【解决方案2】:

只需替换

Function* function;

Function function;

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      替换

      typedef double (*Function)(double);
      

      通过

      typedef double Function(double);
      

      typedef 函数类型。然后你可以在使用时写*

      【讨论】:

        【解决方案5】:

        Standard C++03需要使用address-of操作符获取函数指针。

        func1.function = &f1;
        

        【讨论】:

        • 不,你没有。 & 对于获取成员函数的地址是必需的,但对于非成员函数则不需要。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-24
        • 1970-01-01
        • 2017-07-27
        • 2013-06-06
        • 2010-11-02
        • 2012-08-20
        相关资源
        最近更新 更多