2013-09-19 6 views
2

im пытается включить вид CCTable в моем приложении cocos2d-x. я следовал исходный код из testcpp и я все еще получаю эту ошибку и не на 100% уверен, почемувыделение объекта абстрактного класса типа

«выделения объекта абстрактного типа класса" GameList»

вот мой исходный код

GameList.h

#ifndef __Squares__GameList__ 
#define __Squares__GameList__ 

#include "cocos2d.h" 
#include "cocos-ext.h" 
#include "GameListScene.h" 
#include "GameManager.h" 

using namespace cocos2d; 

class GameList : public CCLayer, public extension::CCTableViewDataSource, public extension::CCTableViewDelegate 

{ 
public: 
    virtual bool init(); 
    CREATE_FUNC(GameList); 

    ~GameList(void); 

    CCLabelTTF* titleLabel; 
    CCLabelTTF* loginLabel; 
    CCLabelTTF* passwordLabel; 

    virtual void tableCellTouched(extension::CCTableView* table, extension::CCTableViewCell* cell); 
    virtual CCSize tableCellSizeForIndex(extension::CCTableView *table, unsigned int idx); 
    virtual unsigned int numberOfCellsInTableView(extension::CCTableView *table); 
}; 

#endif 

GameList.cpp

USING_NS_CC; 
USING_NS_CC_EXT; 

bool GameList::init() 
{ 
    if (!CCLayer::init()) 
    { 
     return false; 
    } 

    CCSize size = CCDirector::sharedDirector()->getWinSize(); 

    CCTableView* tableView = CCTableView::create(this, CCSizeMake(250, 60)); 
    tableView->setDirection(kCCScrollViewDirectionHorizontal); 
    tableView->setPosition(ccp(20,size.height/2-30)); 
    tableView->setDelegate(this); 
    this->addChild(tableView); 
    tableView->reloadData(); 

    return true; 
} 

GameList::~GameList(void) 
{ 

} 

void GameList::tableCellTouched(CCTableView* table, CCTableViewCell* cell) 
{ 
    CCLOG("cell touched at index: %i", cell->getIdx()); 
} 

CCSize GameList::tableCellSizeForIndex(CCTableView *table, unsigned int idx) 
{ 
    return CCSizeMake(60, 60); 
} 

unsigned int GameList::numberOfCellsInTableView(CCTableView *table) 
{ 
    return 20; 
} 

любая помощь будет оценена

Благодаря

+0

Это не проблема, но имена, содержащие два последовательных символа подчеркивания ('__Squares__GameList__', с удвоенной силой) и имена, начинающиеся с символа подчеркивания, за которым следует большая буква, зарезервированы для реализации. Не используйте их. –

+0

они создаются, когда я создаю каждый новый файл. –

+0

Затем вам нужно перенастроить любой инструмент, который вы используете, который генерирует эти вещи. Это зарезервированные имена. Не используйте их. –

ответ

6

Вы наследование или сказать, используя CCtableViewDataSource & CCTableViewDelegate классов, так и должны определить это все виртуальные методы как следующее:

# CCTableViewDataSource 

virtual CCSize cellSizeForTable(CCTableView *table); 

virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx); 

virtual unsigned int numberOfCellsInTableView(CCTableView *table); 

virtual bool hasFixedCellSize(); 

virtual CCSize cellSizeForIndex(CCTableView *table, unsigned int idx); 

# CCTableViewDelegate 

virtual void tableCellTouched(CCTableView* table,CCTableViewCell* cell); 
+1

это то, что я искал. благодаря! –

+0

счастливое кодирование :) –

1

Было бы хорошо, чтобы увидеть, что в CCTableViewDataSource, CCTableViewDelegate классах.

В любом случае, я думаю, ваша проблема в том, что класс GameList не реализует все виртуальные абстрактные методы из вышеупомянутых классов. Просто проверьте, что вы пропустили.

0

Я обнаружил, что вы должны реализовать CCTableViewDelegate, а также CCScrollViewDelegate поскольку CCTableViewDelegate наследует от CCScrollViewDelegate ,

Смежные вопросы