gpt4 book ai didi

c++ - sf::RenderWIndows的 vector

转载 作者:行者123 更新时间:2023-12-02 10:04:36 25 4
gpt4 key购买 nike

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

最佳答案

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

关于c++ - sf::RenderWIndows的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60940304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com