将字符串文字用于sf :: String时出现链接器错误

时间:2013-09-13 22:32:41

标签: c++ xcode macos linker-errors sfml

在使用XCode处理C ++ 11和SFML时遇到一些问题。我已经有了库libc ++和C ++ 11,但是在使用字符串文字命名窗口时,代码出现了问题。之前有人遇到过这个并且知道如何修复它吗?谢谢!

错误: Error

的main.cpp

#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
#include <iostream>
#include <memory>
#include "System.hpp"

int main(int, char const**)
{
    std::shared_ptr<System> main;
    main.reset(new System());

    main->run();

    return EXIT_SUCCESS;
}

System.hpp

#ifndef __AdventuresOfGabe__System__
#define __AdventuresOfGabe__System__

class System
{
public:
    System();
    void run();
    void runEvents();

private:
    std::shared_ptr<sf::RenderWindow> _window;

};

#endif /* defined(__AdventuresOfGabe__System__) */

System::System()
{
    _window.reset(new sf::RenderWindow(sf::VideoMode(600, 400), "Adventures of Gabe"));
    _window->setPosition(sf::Vector2i(400,400));
    _window->setFramerateLimit(60);
}

void System::run()
{
    while(_window->isOpen())
    {
        runEvents();
    }
}

void System::runEvents()
{
    sf::Event event;

    while(_window->pollEvent(event) )
    {
        if( event.type == sf::Event::Closed )
            _window->close();

        if( (event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape) )
            _window->close();
    }
}

1 个答案:

答案 0 :(得分:1)

引用official tutorial

  

关于模板设置的一些说法。如果为C ++编译器和标准库选择不兼容的选项,最终会出现链接器错误。请务必遵循以下准则:

     
      
  • 如果您从下载页面下载了“GCC”版本,则应选择带有GCC和libstdc ++且目标为10.5的C ++ 98。
  •   
  • 如果从下载页面下载了“Clang”版本,则应选择带有Clang和libc ++的C ++ 11。
  •   

所以你需要下载其他版本的SDK,即«Clang»版本。


在不相关的说明中,您可以使用std::make_shared来简化代码。