SFML loadFromFile错误

时间:2018-04-27 17:18:35

标签: c++ windows codeblocks sfml

我在Windows 7上使用CodeBlocks 16.01和SFML GCC 4.9.2 TDM(SJLJ) - 32位 只有loadFromFile不起作用,我不知道该怎么做。 我试图重新安装CodeBlocks,尝试了其他版本的sfml,但没有任何效果。我对SFML有点新鲜,而且非常令人沮丧。

#include <iostream>
#include<string>
#include <SFML/Graphics.hpp>


using namespace sf;
using namespace std;

int changeX = 0;
int changeY = 0;
int rot=0;

int main()
{
bool fscreen;
fscreen=false;
sf::Texture tex;
Sprite sprite;
RenderWindow window(VideoMode(640, 480,16), "SFML works!", Style::Default);
int direction=1,shiftX=10;

while(window.isOpen())
{
    Event event;
    while(window.pollEvent(event))
    {
        switch(event.type)
        {
        case Event::Closed:
            window.close();
            break;

        case Event::KeyPressed:
            if(event.key.code == Keyboard::Escape)
                window.close();
            if(event.key.code == Keyboard::F12)
            {
                fscreen = !fscreen;
                window.close();
                window.create(VideoMode(1920,1080,16), "SFML Test", (fscreen ? Style::Fullscreen : Style::Resize));
            }
            if (event.key.code==Keyboard::A)
                {
                changeX = -5;
                rot = -5;
                }
            else if (event.key.code==Keyboard::D)
                {
                changeX = 5;
                rot =5;
                }
                else
                {
                changeX = 0;
                }
            if (event.key.code==Keyboard::W)
                {
                changeY = -5;
                rot = 0;
                }
            else if (event.key.code==Keyboard::S)
                {
                changeY = 5;
                rot = 0;
                }
            else
                {
                changeY = 0;
                }
            break;
        }

    tex.loadFromFile("img\\obraz.png");

    sprite.move(changeX, changeY);
    sprite.setOrigin(100, 100);
    Vector2f origin = sprite.getOrigin();
    sprite.rotate(rot);
    sprite.setTexture(tex);
    window.clear();
    window.draw(sprite);
    window.display();
    }
}
return 0;
}

错误:

-dedefined reference to`sf :: Texture :: loadFromFile(std :: string const&amp;,sf :: Rect const&amp;)'

-error:ld返回1退出状态

1 个答案:

答案 0 :(得分:0)

您在

中向loadFromFile提供的路径
tex.loadFromFile("img\\obraz.png");

相对路径。这意味着它将相对于您当前的工作目录(查找cwd())得到解决。

您有两种(简单)方法可以解决您的问题(还有其他方法,但它们更难解决)。

1)在loadFromFile的调用中指定资源的完整绝对路径,如tex.loadFromFile("C:/foo/bar/baz.png")。由于几个原因,这显然没有吸引力,首先是您的程序可能安装在不同的位置。

2)坚持使用相对路径,但要确保通过在启动时将程序工作目录更改为某个已知位置(可能相对于可执行文件的位置)来了解相对路径。