错误LNK2001:未解析的外部符号“public:static class sf :: RenderStates const sf :: RenderStates :: Default”

时间:2014-12-21 22:02:16

标签: c++ sfml

以下是代码:

Engine.h

#include <SFML/Audio.hpp>
#include <SFML/Config.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Network.hpp>
#include <SFML/OpenGL.hpp>
#include <SFML/System.hpp>
#include <SFML/Window.hpp>

class Engine
{
public:
    Engine(sf::RenderWindow & wd);
    void run(sf::RenderWindow & wd);

    sf::Sprite player;
    sf::Texture playerTexture;

};

Engine.cpp

#include "Engine.h"

Engine::Engine(sf::RenderWindow & wd) : player(), playerTexture()
{

}

void Engine::run(sf::RenderWindow & wd)
{
    if (!playerTexture.loadFromFile("image/char.png")) {}
    player.setTexture(playerTexture);

    while (wd.isOpen())
    {
        sf::Event event;
        while (wd.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                wd.close();
        }

        wd.clear();
        wd.draw(player);
        wd.display();
    }
}

的main.cpp

#include <SFML/Audio.hpp>
#include <SFML/Config.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Network.hpp>
#include <SFML/OpenGL.hpp>
#include <SFML/System.hpp>
#include <SFML/Window.hpp>

#include "Engine.h"

int main()
{
    sf::RenderWindow * wd = new sf::RenderWindow(sf::VideoMode(800, 600), "Lumia");
    Engine * eg = new Engine(*wd);
    eg->run(*wd);

    return EXIT_SUCCESS;
}

如果我删除wd.draw(播放器);从Engine.cpp,这个错误不会发生,似乎我无法绘制任何东西,我是否定义了默认构造函数而没有调用它?还是我以错误的方式传递论据?请解释一下为什么会出现这个错误并给我一个合理的解决方案,谢谢你的进一步解答。

OBS:SFML 2.1,Microsoft Visual Studio 2013,i7,8gb ram,geforce gtx850M 4gb视频RAM,Windows 8.1。

1 个答案:

答案 0 :(得分:1)

您应该将* .lib文件的文件名添加到vs'链接器。

步骤:

  1. 打开项目属性页。(在vs中按Alt + F7。)
  2. 展开“配置属性”。
  3. 展开“链接器”。
  4. 您将在“链接器”下找到“输入”项,然后单击“输入”。
  5. 在右侧,您会找到“附加依赖项”项。
  6. 在此处添加您的lib文件名。(例如lib1.lib; lib2.lib ...,用分号分隔库)。