Очень быстрый вопрос Globals.h (включая его, некоторые предметы все еще не определены)
Используя globals.h я надеюсь сохранить вектор прямоугольников, а также поле столкновения и несколько глобальных булев
globals.h
extern SDL_Rect winRect;
extern std::vector<SDL_Rect> platform;
extern bool paused;
extern bool exit;
я могу установить для bool значение false, как в файле globals.cpp.
bool paused = false;
bool exit = false;
однако затем, когда я пытаюсь использовать глобальный winRect SDL_Rect или глобальный вектор SDL_Rects, компилятор выдает "неопределенную ссылку на платформу" или "на winRect". что я не могу понять, потому что они установлены в файле globals.h, и globals.h включен в заголовок класса, который пытается их использовать
мне нужно определить что-нибудь еще относительно вектора и прямоугольника в файле globals.cpp?
может быть что-то не так с порядком включения заголовков для класса, которым я пытаюсь манипулировать глобальными переменными?
надеюсь, что есть простое решение этого, я уверен, что я просто что-то упустил.
2 ответа
Вам нужно определить winRect и платформу в globals.cpp:
SDL_Rect winRect;
std::vector<SDL_Rect> platform;
bool paused = false;
bool exit = false;
Extern только сообщает компилятору, что переменная и / или функция определена в другом месте, и если вы не определите ее, компоновщик выдаст вам ошибку, потому что не может найти определение.
А) Используйте пространство имен, возможно, у вас есть конфликт имен. б) включить заголовок, где ваш SDL_Rect
тип определяется до определения вектора этого