我正在跟蹤三個顏色點 - 紅色,綠色和藍色。我有currentFrames類,其中包含幾幀 - 從相機和一些輔助幀 - 以及一些方法來操縱/從幀中提取一些信息。假設我能夠定位每個點的質心,然後我想根據此質心的位置調用特定的函數。整個框架被分成網格,並且網格的每個分段都會分配給它 - 當在這個特定的分段中檢測到點時,該功能將被調用。當我使用指針向成員呼叫成員函數時出現分段錯誤
我的想法是創建指針的多維數組成員函數:
#define CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember))
MyFuncPointerType functions[NUMBER_OF_POINTS][NUMBER_OF_SEGMENTS];
,然後分配的函數的地址本,如:
functions[0][0] = ¤tFrames::something;
當,例如,第一個點將位於網格的第二部分,然後我會調用適當的函數(並且這將從currentFrames類中調用 - 這就是爲什麼我將*this
作爲對象傳遞給CALL_MEMBER_FN
:
CALL_MEMBER_FN(*this, functions[0][1])();
我已經開始用不那麼複雜的例子 - 我想調用不同的功能,用於每個點,但同樣的每個段(「在點的範圍」):
class currentFrames
{
public:
void someMethod();
private:
void calculateVelocity();
void redPointDetected();
void redPointGone();
typedef void (currentFrames::*MyFuncPointerType)();
MyFuncPointerType functions[];
}
然後,在currentFrames的構造我做到以下幾點:
currentFrames::currentFrames()
{
this->functions[0] = ¤tFrames::calculateVelocity;
this->functions[1] = ¤tFrames::redPointDetected;
}
然後,在的someMethod類currentFrames我嘗試調用成員函數:
void currentFrames::someMethod()
{
CALL_MEMBER_FN(*this, this->functions[0])();
}
但是這給了我segfault。我試圖將CALL_MEMBER_FN
定義爲((ptrToObject)->*(ptrToMember))
,但這也給了段錯誤。
這應該怎麼做?有沒有更好的方法來達到我想要的?
omg,對我感到羞恥 - 看起來3am是一個比編程更好的時間,如果我找不到如此明顯的錯字!非常感謝! ;) – jmatraszek 2011-12-15 02:23:01