sf::RenderWIndows 的向量
Vector of sf::RenderWIndows
我有一个需要打开多个 sfml windows 的程序,我正在尝试让一个函数返回 windows 到一个数组。我有一个由 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 Studio19\Community\VC\Tools\MSVC.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>();
我有一个需要打开多个 sfml windows 的程序,我正在尝试让一个函数返回 windows 到一个数组。我有一个由 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 Studio19\Community\VC\Tools\MSVC.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>();