Неопределенная ссылка?Есть что-то, чего я не вижу?(c ++, одноэлементный класс)
Вопрос
Кажется, я не могу избавиться от этой неопределенной ссылки.
У меня есть этот код в приватном разделе Scene.h:
static Scene * scene_;
Существует #включить "Scene.h" в самой первой части заголовка Scene.cpp
Это единственная ошибка, которую я получаю на данный момент, есть идеи?
Я предоставлю любую другую информацию, которую вы пожелаете.
Решение
Когда вы объявляете статический элемент, вы также должны определить его в одном модуле компиляции (и только в одном).:
// a.h
class A
{
static int x;
};
// a.cpp
int A::x = 0;
Объявление переменной в классе не будет резервировать память, просто сообщите компилятору (из других модулей компиляции), что где-то будет доступна переменная с этим именем, определенным.
Другие советы
Зачем использовать Scene*
вместо того , чтобы Scene
?По сути, вы говорите "использовать static
чтобы выделить достаточно места для указателя на Scene
" а затем во время выполнения вы помещаете это Scene
объект в куче с new
(и, я полагаю, никогда delete
это).
Вместо этого просто выделите static и инициализировать в Scene
объект:
static Scene scene_;
а затем соответствующим образом измените все ссылки на сцену (-> становится .):
scene_.addObject(&object);
Это проще, и для загрузки требуется меньше нажатий клавиш.C ++ не требует new
так же часто, как Java или C #.