メンバー関数呼び出しへのポインターに問題があります。関数ポインター呼び出しの外側のポインター「this」のアドレスは、呼び出しの内側とは異なるため、クラス変数へのすべてのアクセスは間違った値になります。
ここにコードを含めます。
class ClassInterface
{
public:
ClassInterface(void);
~ClassInterface(void);
};
class ClassA:public ClassInterface
{
public:
float _a;
public:
ClassA(void);
~ClassA(void);
virtual void Update();
};
class ClassB:public ClassA
{
public:
ClassB(void);
~ClassB(void);
void Update();
void ProcessTaskB(void*);
};
//ClassB.CPP
void ClassB::ProcessTaskB(void*)
{
printf("ClassB::ProcessTaskB\n");
printf("Address of myB INSIDE callback = %d\n",this);
_a += 100;
}
//test CPP
#include "stdafx.h"
#include "ClassInterface.h"
#include "ClassA.h"
#include "ClassB.h"
typedef void (ClassInterface::*Callback) (void* );
int _tmain(int argc, _TCHAR* argv[])
{
ClassA* myA = new ClassA();
ClassB* myB = new ClassB();
Callback fptrB = (Callback) &(ClassB::ProcessTaskB);
printf("Address of myB outside callback = %d\n",myB);
(myB->*fptrB)(NULL);
return 0;
}
そして、これは出力です:
Address of myB OUTSIDE callback = 1332696
Address of myB INSIDE callback = 1332700
したがって、ステートメント _a += 100; _a を変更しません。アドレス (&_a + 4) に変更を加えました。
これを解決する手がかりがありません。修正を手伝ってください。