2014-01-08 24 views
0

我在我的cocos2d-X應用程序下面的代碼沒有被編譯添加SEL_CallFuncO到CCArray

SEL_CallFuncO func1 =callfunc_selector(BPBasketLayer::addSingleNumberBasket); 
    SEL_CallFuncO func2 =callfunc_selector(BPBasketLayer::addSpawnPowerUp); 
    CCArray *arr=CCArray::create(); 
    arr->addObject(func1); 
    arr->addObject(func2); 

現在,這是給我的錯誤?我究竟做錯了什麼 ?

親切的問候

+1

你可能想告訴錯誤是什麼。 – zneak

+0

'SEL_CallFuncO'是一個函數指針,你將它添加到'CCArray',它只接受指向'CCObject'的指針。你可以使用'std :: vector'來保持這些選擇器的引用,並使用'callfuncO_selector' –

回答

1

不知道是什麼錯誤,它看起來像你根據你如何實例func1func2使用錯誤callfunc_selector。我想你想使用callfuncO_selector,因爲它需要CCObject*

CCObject.h

typedef void (CCObject::*SEL_CallFuncO)(CCObject*);

#define callfuncO_selector(_SELECTOR) (SEL_CallFuncO)(&_SELECTOR)

編輯:

您將需要遵循什麼維卡斯的意見建議,並使用std::vector容納函數指針,因爲CCArray適用於CCObject派生類LY。因此,像這樣:

std::vector <SEL_CallFuncO> func_ptr_array;

func_ptr_array.push_back(callfuncO_selector(BPBasketLayer::addSingleNumberBasket));

func_ptr_array.push_back(callfuncO_selector(BPBasketLayer::addSpawnPowerUp));

+0

那麼我如何更改我的代碼 – AndroidDev

+0

@BadLuckBrian我更新了我的答案。 – microslop

+0

非常感謝。我得到它的工作。下次你在城裏的時候,我會給你買一杯咖啡 – AndroidDev