これが私のコードと要件です:
私は2つのクラスAとBを持っていますが、それらには継承がありません。クラスAの1つのメソッドを使用して、クラスBの1つのメソッドを呼び出しました。次に、クラスBのメソッドは、クラスAのメソッドの1つをコールバックして、コールバックを実行する必要があります。
コードの一部:
classA.h:
#include "classB.h"
class classA
{
public:
classA();
classB *pClassB;
void callClassB();
void callBack();
};
classA.cpp:
#include "classA.h"
classA::classA()
{
pClassB = new classB();
}
void classA::callBack()
{
return;
}
void classA::callClassB()
{
pClassB->callFunction();
}
classB.h:
class classB
{
public:
classB();
void callFunction();
}
classB.cpp:
#include "classB.h"
classB::classB()
{
}
void classB::callFunction()
{
// I should call classA's callback here!
}
問題は、classA.hをclassB.hに含めることができないことです。これは、他の場所でコンパイルの問題が発生するためです(それを解決することはできません)。classBをclassAのサブクラスとして作成することはできません(可能であれば、classA::callBack()
代わりに作成する必要があります)。では、この状況に対する解決策はありますか?
更新:それは私が変更したものです:
class classB
{
public:
classB(classA& pCallBack);
void callFunction();
void (classA::*m_callback)(void);
};
classA::classA()
{
pClassB = new classB(*this);
}
classB::classB(classA& pCallBack)
{
m_callback = pCallBack;
}
ポインタを保存しようとしましたが、失敗しました。「互換性のないタイプからの割り当て」と表示されます...何が問題になっていますか?