【问题标题】:error LNK2001: unresolved external symbol "public: static class sf::RenderStates const sf::RenderStates::Default"错误 LNK2001:未解析的外部符号“公共:静态类 sf::RenderStates const sf::RenderStates::Default”
【发布时间】:2014-12-21 22:02:16
【问题描述】:

代码如下:

引擎.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(player);从Engine.cpp,这个错误不会发生,好像我什么都画不了,我是在定义一个默认构造函数而不是调用它吗?还是我以错误的方式传递论点?请解释我为什么会出现这个错误并给我一个合理的解决方案,感谢您的进一步回答。

OBS:SFML 2.1、Microsoft Visual Studio 2013、i7、8gb 内存、geforce gtx850M 4gb 视频内存、Windows 8.1。

【问题讨论】:

    标签: c++ sfml


    【解决方案1】:

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

    步骤:

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

    【讨论】:

    • 您是否也链接了 SFML 静态库?转到项目属性 --> C/C++ --> 预处理器 --> 预处理器定义 --> 添加 SFML_STATIC;
    • 是的,我也这样做了:/
    • 您是在 Debug 还是 Release 模式下编译?如果在调试中确保你有正确的后缀 --> sfml-graphics-s-d
    • 也没有用,也许我应该创建一个全新的项目
    • 并且您确定要链接的所有库都以后缀 -d 结尾(假设您处于调试模式)?例如:sfml-xxxx-s-d.lib。这还假设您使用的是静态库而不是动态库。
    猜你喜欢
    • 2016-03-21
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    相关资源
    最近更新 更多