c ++指向嵌套类的成员函数的指针

时间:2014-02-20 13:27:21

标签: c++ pointers nested

我有一个嵌套类'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'未在此范围内声明。

3 个答案:

答案 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"