pointeurs de fonction générer des "non valide l'utilisation de la non-fonction membre statique' erreur

Je suis en train de saisir pointeur de fonction d'un concept dans une meilleure façon. J'ai donc un de très simple et de travail exemple:

#include <iostream>

using namespace std;

int add(int first, int second)
{
    return first + second;
}

int subtract(int first, int second)
{
    return first - second;
}

int operation(int first, int second, int (*functocall)(int, int))
{
    return (*functocall)(first, second);
}

int main()
{
    int  a, b;
    int  (*plus)(int, int);
    int  (*minus)(int, int);
    plus = &add;
    minus = &subtract;
    a = operation(7, 5, add);
    b = operation(20, a, minus);
    cout << "a = " << a << " and b = " << b << endl;
    return 0;
}

So far So good,
Maintenant, j'ai besoin de regrouper les fonctions dans une classe, puis sélectionnez ajouter ou soustraire basé sur le pointeur de fonction que j'utilise. Donc, je viens de faire une petite modification:

#include <iostream>

using namespace std;

class A
{
public:
int add(int first, int second)
{
    return first + second;
}

int subtract(int first, int second)
{
    return first - second;
}

int operation(int first, int second, int (*functocall)(int, int))
{
    return (*functocall)(first, second);
}
};

int main()
{
    int  a, b;
    A a_plus, a_minus;
    int (*plus)(int, int) = A::add;
    int (*minus)(int, int) = A::subtract;
    a = a_plus.operation(7, 5, plus);
    b = a_minus.operation(20, a, minus);
    cout << "a = " << a << " and b = " << b << endl;
    return 0;
}

et l'erreur évidente est:

ptrFunc.cpp: In function int main()’:
ptrFunc.cpp:87:29: error: invalid use of non-static member function int A::add(int, int)’
ptrFunc.cpp:88:30: error: invalid use of non-static member function int A::subtract(int, int)’

coz je n'ai pas spécifié de l'objet à invoquer(et je ne veux pas utiliser des méthodes statiques pour l'instant)

EDIT:
plusieurs observations et réponses a suggéré que le non-version statique(comme je l'ai écrit) n'est pas possible.(merci à tous)
Donc,
La modification de la classe de la manière suivante également l'habitude de travailler:

#include <iostream>

using namespace std;

class A
{
    int res;
public:
    A(int choice)
    {
        int (*plus)(int, int) = A::add;
        int (*minus)(int, int) = A::subtract;
        if(choice == 1)
            res = operation(7, 5, plus);
        if(choice == 2)
            res = operation(20, 2, minus);
        cout << "result of operation = " << res;
    }
int add(int first, int second)
{
    return first + second;
}

int subtract(int first, int second)
{
    return first - second;
}

int operation(int first, int second, int (*functocall)(int, int))
{
    return (*functocall)(first, second);
}
};

int main()
{
    int  a, b;
    A a_plus(1);
    A a_minus(2);
    return 0;
}

a généré cette erreur:

ptrFunc.cpp: In constructor A::A(int)’:
ptrFunc.cpp:11:30: error: cannot convert A::add from type int (A::)(int, int)’ to type int (*)(int, int)’
ptrFunc.cpp:12:31: error: cannot convert A::subtract from type int (A::)(int, int)’ to type int (*)(int, int)’

mai je sais comment résoudre ce problème s'il vous plaît?

grâce

Un membre de la fonction se fait implicitement this en tant que premier paramètre.
Vous avez besoin de faire statiques. Ils semblent être naturellement statique de toute façon.
Je vais apporter des modifications à ma question. S'il vous plaît avoir un coup d'oeil et je vous la valeur de vos commentaires. merci

OriginalL'auteur rahman | 2013-04-02