讓我通過一個示例(使用VS2013的VC++代碼)來解釋我的問題。通過VC++中的類A函數指針調用類成員函數(類B)
void Imhere(int num)
{
printf_s("\n Hello World printed %d\n",num);
}
class Abc;
class Dllclas
{
public:
void dllFunc()
{
printf_s("\n Heelo this is DLl func\n");
}
};
void outsideFunc()
{
printf_s("\n Heelo this is outside func\n");
}
typedef void(*outsideFP)();
typedef void (Dllclas::*funcFP)();
class Abc
{
public:
funcFP fp;
outsideFP outFp;
int a;
void assignOUTFp()
{
outFp = &outsideFunc;
}
void assignFP()
{
fp = &(Dllclas::dllFunc);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Abc* abcObj1 = new Abc();
abcObj1->a = 7;
abcObj1->assignOUTFp();
abcObj1->outFp(); // THIS FUNCTION CALL WORKS PERFECTLY FINE.
abcObj1->assignFP();
abcObj1->fp(); // COMPILATION ERROR.
在該代碼段,在最後一行
abcObj1-> FP(); //編譯錯誤。
我收到編譯錯誤。
錯誤C2064:術語不計算爲服用0參數
另外,如果我懸停我的鼠標在「abcObj1-> FP()」,我得到一個紅色的錯誤讀取功能「前述顯而易見呼叫的括號
表達式必須具有 (指針TO-)功能類型
在這裏,我'能夠調用函數「abcObj1-> outFp();這是在任何階級之外。 因此,我知道我得到這個錯誤的原因是因爲,函數地址出現在「abcObj1-> fp();」屬於Dllclas類中的一個成員函數,即「dllFunc()。
我也refered的鏈接 link但我無法解析編譯錯誤。
我能請得到與代碼示例幫助? 預先感謝
我找不到'FP'成員。你的意思是'fp'? – dasblinkenlight
是的,這是「fp」而不是「FP」(錯字),我很抱歉。現在糾正它。謝謝。 – codeLover
'fp'是'Dllclas'成員的指針。你需要一個'Dllclas'的實例來調用這個成員 - 就像你不能直接調用'dllFunc'而沒有'Dllclas'實例一樣。 –