Создал проект на cocos2d-x 3.10 с целью написать ремейк игры Stack Attack. Создал пользовательский класс StackBlock, который описывает поведение ящика на игровом поле и в классе главной сцены cocos2d-x хочу создать двумерный вектор указателей на пользовательский класс StackBlock. + 2 вспомогательных вектора, один из них содержит сумму блоков в колонке, другой сумму блоков в ряду.
По задумке в векторе рядов будут указатели на существующие блоки или nullptr если блока нет. Я подумал что будет удобнее если в момент инициализации сцены будет создаваться эти вектора и дальнейшее обращение к ним было бы из функций класса StackBlock и игрока через пространство имён этой сцены,как это сделано с инициализацией сцены
Сlass EndlessMode : public cocos2d::Layer
{
public:
static std::vector<std::vector<StackBlock*> > VVMainGrid;
static std::vector<int> VIColumnWeight;
static std::vector<int> VIRowWeight;
// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::Scene* createScene();
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();
// implement the "static create()" method manually
CREATE_FUNC(EndlessMode);
};
и последующее обращение напрямую к функции:
auto scene = EndlessMode::createScene();
Но при попытки сбилдить проект, я получаю ошибку линковки на эти вектора.
Не объявляя их static ошибки пропадают...Но тогда я не понимаю как к ним обратиться, я не вижу где именно создаётся экземпляр класса сцены. Почему так происходит? Что из теории я упустил про статические члены класса?
Репозиторий тут