Хьюстон, у нас есть проблема. Вот упрощенная версия кода:Глобальная переменная выходит за рамки! Какого черта?
main.cpp
#include <SFML/Graphics.hpp>
#include "global.hpp"
#include "init.hpp"
int main(void)
{
createWindow();
loadLevel();
while(window.isOpen())
{
if(!handleEvents()) window.close();
window.clear();
window.draw(bgSprite);
window.display();
}
return 0;
}
global.hpp
sf::Texture bgTexture;
sf::Sprite bgSprite;
init.hpp
void loadGraphics(void)
{
bgTexture.loadFromFile("bg.png");
bgSprite.setTexture(bgTexture);
}
Несмотря на то, что переменные текстуры и спрайта глобальны, экран окна остается черным. Однако, когда я помещаю переменные в функцию main(), все работает отлично. Может ли кто-нибудь объяснить, почему это происходит?
Я думал, что вы можете вызывать глобальные переменные всякий раз, когда хотите, и они исчезнут только тогда, когда сама программа закончится.
Кстати, я также попытался поместить переменные и loadGraphics() прямо за main() (не в заголовочном файле), тем не менее, никаких результатов. Я также прокомментировал весь дополнительный код, поэтому проблема определенно лежит здесь.
EDIT: Я ИДЕТ!
Я не назвал loadGraphics (function). Спасибо! Прошу прощения за потраченное время. Все началось правильно. Грустный lol - потратил более 1 часа на крепление этой вещи ...
@MikeSeymour Хорошо, гипотеза одна удалена. Объявление глобалов в заголовочном файле без соответствующей «реализации» кажется более чем немного отрывочным. – tadman
Пробовал использовать внешний. В журнале ошибок перечислены четыре неопределенные ссылки, либо на bgTexture, либо на bgSprite –
Я проголосовал за закрытие этого вопроса сейчас, так как он вряд ли поможет в любых будущих исследованиях (помимо напоминания другим, чтобы проверить, действительно ли они назовут их функции). –