0

XCode を使用して C++11 および SFML を処理する場合、リンクの問題で問題が発生します。ライブラリ libc++ と C++11 は既に持っていますが、文字列リテラルを使用してウィンドウに名前を付けると、コードに問題が発生します。以前にこれに遭遇し、それを修正する方法を知っている人はいますか? ありがとう!

エラー: エラー

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();
    }
}
4

1 に答える 1

1

公式チュートリアルを引用すると、

テンプレートの設定について一言。C++ コンパイラと標準ライブラリに互換性のないオプションを選択すると、リンカー エラーが発生します。次のガイドラインに従ってください。

  • ダウンロード ページから「GCC」バージョンをダウンロードした場合は、C++98 with GCC および libstdc++ を選択し、10.5 をターゲットにする必要があります。
  • ダウンロード ページから「Clang」バージョンをダウンロードした場合は、Clang と libc++ を含む C++11 を選択する必要があります。

そのため、SDK の別のバージョン、つまり «Clang» バージョンをダウンロードする必要があります。


無関係なことですが、 を使用std::make_sharedしてコードを簡素化できます。

于 2013-09-13T22:50:06.477 に答える