+ -
当前位置:首页 → 问答吧 → 一个有关于类名+::+函数名的问题

一个有关于类名+::+函数名的问题

时间:2011-12-16

来源:互联网

我朋友给我看了一段代码,有个地方我不太明白,所以想请教下各位。

我简单的说,具体是这样的

先有这么一个类:
class A
{
  double m_recieve;
 public:
  A();
  ~A();
  int f(double p_rec);
  void g();
}

int A::f(double p_rec)
{
  m_recieve = p_rec;
  return 0;
}

void A::g()
{
  h(handle, xxxx, &A::f); 
  // 此处的h函数是一个在库中定义的,然后他的第一个参数是个句柄,第二个参数无所谓
  // 关键是第三个参数,他使用了这个类A中的f函数,但是没有写参数列表
  // 但是当我朋友在f函数中,想给A的成员变量赋值时,编译器报错。
}

补充一句,我朋友在f函数里手动做赋值 m_recieve = 10.0;也不行,于是我进行了自己的推测。

以下是我个人的推测,这里写成&A::f,是不是有静态函数的味道,这样f就是相对于所有类而不是某个特定的对象,所以才不能给成员变量赋值呢?

仅仅是个人的推测。

希望高手能解答下,顺便帮我解释下这里为什么要写成&A::f这样的形式,先谢谢各位了

作者: arenapal   发布时间: 2011-12-16

类函数指针

作者: dyangrun   发布时间: 2011-12-16

作者: pathuang68   发布时间: 2011-12-16

h(handle, xxxx, &A::f);  
函数参数中般会有 A的对象,对象+类成员函数指针 完成回调的。

作者: Demon__Hunter   发布时间: 2011-12-16

引用 3 楼 demon__hunter 的回复:

h(handle, xxxx, &A::f);
函数参数中般会有 A的对象,对象+类成员函数指针 完成回调的。


有个问题,既然有了A的对象,为什么在f中给A的私有成员赋值时,会出错呢?

作者: arenapal   发布时间: 2011-12-17

还有人能帮助小弟么

作者: arenapal   发布时间: 2011-12-18

h函数没有给f函数传入this指针,f就无法找到自己的A类的私有变量了,修改f函数为 int f(A*,double p_rec);
h函数h(handle, xxxx, &A::f(A*double))仅供参考

作者: li_hai   发布时间: 2011-12-18

关注,不知道怎么该!

作者: greatliudy123   发布时间: 2011-12-18

还有人懂么?

作者: arenapal   发布时间: 2011-12-21