还有,我知道类的成员函数是以_stdcall标准调用,而外部函数是以_cdecl标准调用,但我不知道该怎么改,只知道错误原因。
请问要是我上述的功能该怎么改。

解决方案 »

  1.   

    我们知道,C++的类声明中,private是其缺省声明,如果一个类的成员函数是私有的话,外部函数不能访问岂非是再正常也不过的事了。呵呵。
      

  2.   

    同病之怜!为了实现这个我迫不得已将类成员声明成static,虽然可行,但让我极度不爽!!!那位高人能指点一二?感激不尽!
      

  3.   

    同意wolveshunter的说法,成员函数在声明后并没有实体。所以不能用参数方式传递,将要作为参数的函数声明成静态函数可以解决这个问题。
      

  4.   

    去看看我的问题,可能对你也有用
    问题:         如何定义指向成员函数的指针?
     
    网页http://www.csdn.net/expert/topic/449/449184.shtm
      

  5.   

    去看看
    ON_UPDATE_COMMAND_UI的定义
      

  6.   

    谢谢各位了,我的成员变量是声明为公有的,
    还有,我也知道声明为static,但正如WolvesHunter(Lee)所说的,那样太不爽了
      

  7.   

    原因如下:
    》double A::f2(double y)
    》{
    》    g(f1,0,y);//此处调用成员函数f1,作为函数指针传递给g
    》    return 1;
    》}
    上面你想将f1作为函数指针传递给外部函数g,可惜不能成功,因为f1的传递是值传递(指针值传递),因为在f2中所以展开后实际传递为,g(this->f1,0,y),注意此处传递的并不是函数指针(也可以说是函数指针,只不过其是内部指针,不仅对外部有保护属性,而且是相对值,相对论你懂吧,哈哈!),而是f1相对于this指针的f1的偏移值,因为不能成功调用,而在g中只得到f1指针的偏移值,而对于A::this指针是不可见的,可见你对于类的实现技术并不清楚,建你找一本有关C/C++的基础书籍看一看,(建议而已,没有恶意,最好读一读MSDN或外著书籍)。
    你可以修改g()如下:
    double g(double (A::*f)(double),double a,double b)
    {
            //......
    }
      

  8.   

    既然外部声明是要声明为doulbe g(double (A::*f),double a,double b),
    显然函数g只能引用A的成员函数,那我干脆把g也当成A的成员函数算了。
    我把 g声明为A的成员寒暑,但是在访问时出现错误,,
    即不能通过f(a)或f(b)这样的形式访问传递过来的函数,
    出现如下错误term does not evalute to a function,意思是f不是一个函数,
    请再次帮助!
      

  9.   

    应该是与类成员函数有关吧,因为类成员函数有一个缺省的参数this,所以在类A中f1的参数个数不是一个而是两个,而在函数g中的函数指针却只有一个参数,这两个函数的参数定义不匹配,所以会出现错误,而类的static成员函数没有缺省的参数this,所以不会出现错误。