Вектор СФ :: RenderWIndows - PullRequest
       35

Вектор СФ :: RenderWIndows

1 голос
/ 31 марта 2020

У меня есть программа, которой нужно открыть несколько sfml windows, и я пытаюсь получить функцию, которая возвращает windows в массив. У меня есть вектор, созданный из unique_ptr, но когда я go использую emplace_back, я получаю эту ошибку.

Error C2664 'sf::RenderWindow::RenderWindow(const sf::RenderWindow &)': cannot convert argument 1 from '_Ty' to 'sf::WindowHandle'  C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\include\memory  2064    

Минимальный код, который выдает ошибку:

void MakeKey::DrawKey(string input)
{
    unique_ptr <sf::RenderWindow> window = make_unique<sf::RenderWindow>(new sf::RenderWindow);
    MakeKey::NewKey Key;
    if (input == "A")
        Key.Img.loadFromFile("Assets/Images/A.png");
    else if (input == "D")
        Key.Img.loadFromFile("Assets/Images/D.png");
    //ect
    window->create(sf::VideoMode(Key.Img.getSize().x, Key.Img.getSize().y, 32), "Key", sf::Style::None);
    unique_ptr<sf::RenderWindow> windowPtr;
    WindowArray.emplace_back(move(windowPtr));
    Key.Tex.loadFromImage(Key.Img);
    Key.Sprite.setTexture(Key.Tex);
    KeyArray.emplace_back(move(Key));
    WindowArray.emplace_back(move(window));
    cout << "KeyArray Has " << KeyArray.size() << " Elements\n" << "WindowArray Has " << WindowArray.size() << " Elements" << endl;
}
    vector <MakeKey::NewKey> KeyArray;
    vector <unique_ptr<sf::RenderWindow>> WindowArray;

для ссылка RenderWindow не копируется. Я никогда раньше не использовал уникальные указатели, так что, скорее всего, это проблема. В любом случае спасибо за помощь.

1 Ответ

2 голосов
/ 31 марта 2020
unique_ptr <sf::RenderWindow> window = make_unique<sf::RenderWindow>(new sf::RenderWindow);

должно быть

unique_ptr <sf::RenderWindow> window = make_unique<sf::RenderWindow>();

Аргументы make_unique - это аргументы, которые вы хотите дать конструктору sf::RenderWindow.

Вы путаетесь с эта запись

unique_ptr <sf::RenderWindow> window(new sf::RenderWindow>());

, которая является альтернативой make_unqiue, но обычно make_unique предпочтительна из-за простоты и эффективности.

Также не забывайте, что вы можете упростить дальнейшее использование авто

auto window = make_unique<sf::RenderWindow>();
...