4

クラス内で関数ポインタを定義し、クラスのインスタンスを介してアクセスしようとしていますが、エラーが表示されます。

コードは次のとおりです。

 1 #include<stdio.h>
 2 
 3 class pointer {
 4 public:
 5    int (pointer::*funcPtr)(int);
 6    pointer() {
 7       funcPtr = &pointer::check;
 8    }
 9 
10 
11    int check(int a)
12    {
13       return 0;
14    }
15 
16 };
17 
18 int main()
19 {
20    pointer *pt=new pointer;
21    return (pt->*funcPtr)(3);
22 }

コンパイル時エラーが表示されます:

checkPointer.cpp:21:15: error: ‘funcPtr’ was not declared in this scope

私を助けてください。

前もって感謝します。

4

3 に答える 3

2

ここでの問題は、funcPtrがpt内で宣言されているため、ptという名前を2回使用する必要があることです。1回はメンバー選択へのポインターの左側として、もう1回は選択するポインタークラスを選択します。 funcPtr:

(fn->*(fn->funcPtr))(3);

この理由は、あるポインターのインスタンスのfuncPtrメンバーが指す関数を、別のポインターのインスタンスで呼び出す可能性があるためです。

お役に立てれば!

于 2012-03-30T15:37:47.310 に答える
1

私はあなたが意味したと思います

pt->*(pt->funcPtr)(3);
于 2012-03-30T15:45:04.687 に答える
1

C++ FAQの指示に従うことをお勧めします。通常、その作者はtypedefs と#defines を避けますが、この場合は例外を設けています。

#define CALL_MEMBER_FN(object,ptrToMember)  ((object).*(ptrToMember))
…
    CALL_MEMBER_FN(*pt, pt->funcPtr)(3)

Ps これらの指示に従わなくても、そのページを読んでください。メンバー関数へのポインターに関する有用な情報がたくさんあります。

于 2012-03-30T16:18:24.420 に答える