Очень быстрый вопрос 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 тип определяется до определения вектора этого

Другие вопросы по тегам