我有一个嵌套类'Outer :: Inner'中定义的指针到'Outer'类的成员函数的问题:
class Outer{
//class Inner;
class Inner{
public:
Inner(Outer& o){
}
int (Outer::*pf)(int);
};
public:
Outer();
~Outer();
int function(int a);
Inner* i;
};
Outer::Outer(){
i = new Inner( *this );
i->pf= &Outer::function;
(i->*pf)(2); //problem here!
};
Outer::~Outer(){
delete i;
};
int Outer::function(int a){
return 0;
};
正如您所看到的,我想通过Inner类的指针调用该函数,但是我收到一个错误:'pf'未在此范围内声明。
答案 0 :(得分:2)
如错误所示,pf
未在该范围内声明。它是i
的成员,可以i->pf
访问。据推测,您想在this
上调用它:
(this->*(i->pf))(2);
答案 1 :(得分:0)
2个解决方案。
1 :(指向非成员函数的指针)
class Outer{
class Inner{
public:
Inner(Outer& o){
}
int (*pf)(int);
};
public:
Outer();
~Outer();
static int function(int a);
Inner* i;
};
Outer::Outer(){
i = new Inner( *this );
i->pf= &Outer::function;
int j = (*(i->pf))(2); // now OK
};
2 :(指向成员函数的指针,必须在某个实例上调用)
class Outer{
class Inner{
public:
Inner(Outer& o){
}
int (Outer::*pf)(int);
};
public:
Outer();
~Outer();
int function(int a);
Inner* i;
};
Outer::Outer(){
i = new Inner( *this );
i->pf= &Outer::function;
int j = (this->*(i->pf))(2); // now OK
};
答案 2 :(得分:0)
您需要在某个Outer
对象上调用该函数,因为它是指向成员函数的指针。
查看您的代码,也许您需要这个
//-----------------vvv <- argument
(this->*(i->pf))(2);
//-^--------------^ <- these are important and they say something like
// "execute function `*(i->pf)` on `this` object"