请问下面的代码为什么不能通过编译?,应该怎样修改?
class c1{
public:
c1(){};
~c1(){};
double simpsn(double eps,double (c1::*fun)(double)){return 0.;};
double fZqmnx(double){return 0.;};
void zlk(void){simpsn(0.,c1::fZqmnx);};//去掉这句是能够通过编译的。
};
int main(int argc, char* argv[])
{
c1 inst;
inst.simpsn(0., c1::fZqmnx);
return 0;
}
谢谢!
class c1{
public:
c1(){};
~c1(){};
double simpsn(double eps,double (c1::*fun)(double)){return 0.;};
double fZqmnx(double){return 0.;};
void zlk(void){simpsn(0.,c1::fZqmnx);};//去掉这句是能够通过编译的。
};
你想想:在没有生成类的实例前,c1::fZqmnx这个地址怎么取?
应该用静态成员函数。
刚才的写法有点不合楼主的意思
应该如下
class c1
{
public:
c1(){};
~c1(){};
double fZqmnx( double )
{
return 0.;
};
double simpsn(double eps, double( c1::*PFfun)(double) )
{
return 0.1 ;
};
static void zlk( c1 *pThis )
{
double (c1::*pmf)( double ) = &c1::fZqmnx;
ShowMessage( pThis->simpsn( 0.,pmf )) ;
};
};
class c1{
public:
c1(){};
~c1(){};
double simpsn(double eps,double (c1::*fun)(double)){return 0.;};
double fZqmnx(double){return 0.;};
void zlk(void){simpsn(0.,c1::fZqmnx);};//去掉这句是能够通过编译的。
};
改成这样:
class c1{
public:
c1(){};
~c1(){};
double fZqmnx(double){return 0.;};
double simpsn(double eps,double (c1::*fun)(double)){return 0.;};
void zlk(void){simpsn(0.,c1::fZqmnx);};//去掉这句是能够通过编译的。
};
应该可以了吧