Указатель на функцию-член - не хочет работать - PullRequest
2 голосов
/ 31 марта 2012

в этом коротком коде:

class X
{
private:
    class Y
    {

    public:
        typedef void (X::* ptr_to_mem)();
        Y(X* parent,ptr_to_mem ptr):parent_(parent),ptr_(ptr)
        {}
        void run()
        {
            parent_->*ptr_();//at this line I'm getting an error
        }
    private:
        X* parent_;
        ptr_to_mem ptr_;
    };

public:
    void some_fnc()
    {
        cout << "some_fnc";
    }

    void another()
    {
        Y y_(this,&X::some_fnc);
        y_.run();
    }

};

ошибка:

error: must use '.*' or '->*' to call pointer-to-member function in '((X::Y*)this)->X::Y::ptr_ (...)', e.g. '(... ->* ((X::Y*)this)->X::Y::ptr_) (...)'

1 Ответ

6 голосов
/ 31 марта 2012

Добавьте дополнительную пару символов:

(parent_->*ptr_)();

См. C ++ FAQ lite 33.6 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...