Неопределенные ссылки? Есть что-то, чего я не вижу? (c ++, синглтон-класс) - PullRequest
0 голосов
/ 22 апреля 2009

Кажется, я не могу удалить эту неопределенную ссылку.

(screenshot of issue)

У меня есть этот код в приватном разделе Scene.h:

static Scene * scene_;

В самой первой части заголовка Scene.cpp есть *include "Scene.h"

Это единственная ошибка, которую я получаю на данный момент, есть идеи?

Я предоставлю любую другую информацию, которую вы хотите.

Ответы [ 2 ]

7 голосов
/ 22 апреля 2009

Когда вы объявляете статический член, вы также должны определить его в одном модуле компиляции (и только в одном):

// a.h
class A
{
   static int x;
};

// a.cpp
int A::x = 0;

Объявление переменной в классе не зарезервирует память, просто сообщите компилятору (из других модулей компиляции), что будет переменная, доступная по этому имени, определенному где-то.

1 голос
/ 22 апреля 2009

Зачем использовать Scene* вместо Scene? По сути, вы говорите «используйте static, чтобы выделить достаточно места для указателя на Scene», а затем во время выполнения вы помещаете этот объект Scene в кучу с new (и, я полагаю, никогда delete это).

Вместо этого просто статически выделите и инициализируйте объект Scene:

static Scene scene_;

и затем соответствующим образом изменить все ссылки на сцену (-> становится.):

scene_.addObject(&object);

Это проще и требует меньше нажатий клавиш для загрузки. C ++ не требует new так часто, как Java или C #.

...