rusbaron
@rusbaron
Не стыдно не знать, стыдно не интересоваться

Почему создание static члена класса появляется ошибка линковки?

Создал проект на cocos2d-x 3.10 с целью написать ремейк игры Stack Attack. Создал пользовательский класс StackBlock, который описывает поведение ящика на игровом поле и в классе главной сцены cocos2d-x хочу создать двумерный вектор указателей на пользовательский класс StackBlock. + 2 вспомогательных вектора, один из них содержит сумму блоков в колонке, другой сумму блоков в ряду.
0ede5b1008ef4dd0897d3d7b1f621635.jpg
По задумке в векторе рядов будут указатели на существующие блоки или 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 ошибки пропадают...Но тогда я не понимаю как к ним обратиться, я не вижу где именно создаётся экземпляр класса сцены. Почему так происходит? Что из теории я упустил про статические члены класса?
Репозиторий тут
  • Вопрос задан
  • 423 просмотра
Решения вопроса 1
@iv_k
static члены должны быть объявлены в cpp файле

как-то так.
std::vector<std::vector<StackBlock*> > EndlessMode::VVMainGrid;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы