首页 > 解决方案 > sf::RenderWINdows 的向量

问题描述

我有一个需要打开多个 sfml 窗口的程序,我正在尝试使用一个将后窗口放置到数组的函数。我有由 unique_ptr 制成的向量,但是当我使用 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 是不可复制的。我以前从未使用过唯一指针,所以这可能是问题所在。无论如何,谢谢你的帮助。

标签: c++c++14sfml

解决方案


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 进一步简化

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

推荐阅读