Я изучаю использование SFML с идеей создания небольшой игры, до сих пор я создал окно и испортил его настройками, а также создал цикл рисования и обработчик событий.SFML loadFromFile undefined reference
Проблемы начались, когда я пытался добавить свою первую текстуру, используя следующий код:
#include "SpaceNomad.ih"
void MainMenu(GameEngine &Engine)
{
sf::Texture texture;
if(!texture.loadFromFile("MenuBackGround.png"))
{
cout << "couldn't load background texture\n";
}
sf::Sprite *sprite = new sf::Sprite;
sprite->setTexture(texture);
Engine.AddEntity(sprite, 5);
}
, который находится за пределами другого изображения буквально пример кода, указанному на SFML tutorial page.
Когда я пытаюсь скомпилировать это я получаю следующее сообщение об ошибке:
||=== Build: Debug in space nomad (compiler: GNU GCC Compiler) ===|
obj\Debug\projects\st\take2\MainMenu.o||In function `Z8MainMenuR10GameEngine':|
D:\projects\st\take2\MainMenu.cpp|7|undefined reference to `_imp___ZN2sf7Texture12loadFromFileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4RectIiEE'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
Я проверил, что все библиотеки SFML включены в опции сборки (я использую код :: Blocks с MinGW GCC) ,
https://drive.google.com/file/d/0B4qzXcgqbLZtcHJWUy1vSUhpdVk/view?usp=sharing
Другие темы я видел много с неопределенными ссылками на функции людей, которые сделали себя, но здесь я использую библиотеку.
редактировать: Я просто попытался с основной формой от того же libary:
sf::CircleShape *shape = new sf::CircleShape(50);
// set the shape color to green
shape->setFillColor(sf::Color(100, 250, 50));
Engine.AddEntity(shape, 5);
Который собирает и отображает без проблем.
Однако я должен добавить, что даже если вы исправите эту неопределенную ошибку ссылки, вы столкнетесь с проблемой «белого квадрата». Кроме того, я не думаю, что это хороший дизайн, чтобы использовать кучу всякий раз, когда вы можете. Почему ваш 'sf :: Sprite'-Instance не находится в стеке? – NaCl
идея заключалась в том, чтобы сохранить реализацию объектов, подобных фону или кнопкам, и отдельному циклу рисования, где цикл рисования имеет только указатель на объекты, которые ему нужно рисовать. Здесь реализация объекта просто еще не реализована. Если бы я положил его в стек, он бы был очищен к тому времени, когда он был бы нарисован. –
Ваша текстура очищается до нарисованного. Спрайт имеет только указатель на текстуру, а не всю копию самой текстуры. Таким образом, вы получите то, что текстура не будет нарисована. – NaCl