0

次のコードがあります

#include<iostream>
using namespace std;
class operate
{
    int x;
    int y;
public:
    operate(int _x, int _y):x(_x), y(_y)
    {}
    void add(const char* ch)
    {
        cout<<ch<<" "<<x+y;
    }
    void subtract(const char* ch)
    {
        cout<<ch<<" "<<x-y;
    }
    void multiply(const char* ch)
    {
        cout<<ch<<" "<<x*y;
    }
};
int main()
{
    void (operate::*fptr[3])(const char*);
    operate obj(2,3);
    fptr[0] = &(operate.add);              //problem
    fptr[1] = &(operate.multiply);         //problem
    fptr[2] = &(operate.subtract);         //problem
    (obj.*fptr[0])("adding");
    (obj.*fptr[1])("multiplying");
    (obj.*fptr[2])("subtracting");
}

メンバ関数を関数ポインタ配列に正しく割り当てていないようです。どうすればこれを解決できますか。私はVS2010を使用しています

4

2 に答える 2

4

ドット (メンバーオブ) 演算子は、オブジェクトのメンバーにアクセスするために使用されます。クラスと名前空間には、::演算子を使用する必要があります。&また、より優先順位が低く、::より読みやすいため、括弧を付けないでください

fptr[0] = &operate::add;
于 2013-07-16T08:44:45.577 に答える
0

これは仕事をするはずです

void testFP()
{
    typedef void (operate::*memFP)(const char*); 
    memFP fptr[3];

    fptr[0] = &operate::add;
    fptr[1] = &operate::multiply;
    fptr[2] = &operate::subtract;
    operate op(42, 42);

    (op.*(fptr[0]))("adding");
}
于 2013-07-16T09:04:40.797 に答える