0

Eсть такой код, думаю этого примера достаточно, потому что в нём ошибка, я не знаю что делать.

160 class Scene {
161         public:
162                 static Store *store;
163                 static void alloc_store ( int count ) {
164                         store = new Store ( count );
165                 }
166                 static void add ( Actor *actor, int pos ) {
167                         store->add ( actor, pos );
168                 }
169                 static void rm ( Actor *actor, int pos ) {
170                         store->rm ( actor, pos );
171                 }
172                 static void draw ( ) {
173                         store->draw ( 0 );
174                         store->draw ( 1 );
175                         store->draw ( 2 );
176                         store->draw ( 3 );
177                 }
178 };

При компиляции пишет вот что.

/usr/bin/ld: /tmp/ccLwGNMG.o: в функции «Scene::alloc_store(int)»:
/home/cf/projects/papsy/./src/menu/../engine/scene.h:164: неопределённая ссылка на «Scene::store»
/usr/bin/ld: /tmp/ccLwGNMG.o: в функции «Scene::add(Actor*, int)»:
/home/cf/projects/papsy/./src/menu/../engine/scene.h:167: неопределённая ссылка на «Scene::store»
/usr/bin/ld: /tmp/ccLwGNMG.o: в функции «Scene::draw()»:
/home/cf/projects/papsy/./src/menu/../engine/scene.h:173: неопределённая ссылка на «Scene::store»
/usr/bin/ld: /home/cf/projects/papsy/./src/menu/../engine/scene.h:174: неопределённая ссылка на «Scene::store»
/usr/bin/ld: /home/cf/projects/papsy/./src/menu/../engine/scene.h:175: неопределённая ссылка на «Scene::store»
/usr/bin/ld: /tmp/ccLwGNMG.o:/home/cf/projects/papsy/./src/menu/../engine/scene.h:176: далее есть ещё неопределённые ссылки на «Scene::store»

1 Answers1

1

Допиши куда-нибудь определение поля:

Store *Scene::store = 0;
Qwertiy
  • 123,725
  • 3
    инквизиция уже выехала... они разъяснят священную разницу между определением и объявлением... – Fat-Zer Jan 29 '20 at 12:50
  • @Fat-Zer, вроде исправил. Я вообще хотел как дубликат закрыть, но не нашёл... – Qwertiy Jan 29 '20 at 12:51
  • @Qwertiy, не до конца исправили _ инициализируйте указатель(он не имеет дефолтное значение) – AR Hovsepyan Jan 29 '20 at 12:58
  • @Qwertiy а почему так надо делать? –  Jan 29 '20 at 13:01
  • @xverizex потому-что объявленных, но не определённых переменных как бы и не существует. Как ей пользоваться ? Компилятор поэтому и ругается – vt-egorov Jan 29 '20 at 13:30
  • @xverizex, строгое объяснение — «потому что так требует язык»... рациональное зерно за этим состоит в том, чтобы дать компилятору знать в какой объектник пристроить символ... – Fat-Zer Jan 29 '20 at 13:47
  • @ARHovsepyan, исправил. Глобальные переменные же сами обнуляются - я думал, что и тут так же? – Qwertiy Jan 29 '20 at 18:36