我正在尝试在SFML中创建矩形矩阵,并使它们看起来像地板。为此,我想使用唯一指针的向量。但是,似乎有一个我不太了解的错误。
成功初始化向量后,在完全相同的函数中将其声明为删除。当我执行类似的实现但使用new
或共享指针时,就没有问题。
是什么导致此错误,我该如何解决?发生的位置在下图中可见:
代码:
sf::Texture texture;
texture.loadFromFile("./resources/wood.jpg");
std::vector<std::unique_ptr<sf::Sprite>> floor;
unsigned counter = 0;
float posX = 0.f, posY = 0.f;
for (int i = 0; i < 50; i++) {
floor.push_back(std::make_unique<sf::Sprite>());
floor[i]->setTexture(texture);
floor[i]->setTextureRect(sf::IntRect(1, 1, 100, 100));
floor[i]->setPosition(sf::Vector2f(posX, posY));
counter++;
posX += 100.f;
if (counter == 10) {
posY += 100.f;
posX = 0.f;
counter = 0;
}
}
while (window.isOpen()) {
sf::Event eH;
for (auto &sprite : floor)
window.draw(*sprite.get());
while (window.pollEvent(eH)) {
if (eH.type == sf::Event::Closed)
window.close();
if (eH.type == sf::Event::KeyReleased && eH.key.code == sf::Keyboard::Escape)
window.close();
if (eH.type == sf::Event::Resized)
glViewport(0, 0, eH.size.width, eH.size.height);
}
window.display();
window.clear(sf::Color::Black);
错误说明:
严重性代码描述项目文件行抑制状态 错误C2280'std :: unique_ptr
> :: unique_ptr(const std :: unique_ptr <_Ty,std :: default_delete <_Ty >>&)':尝试引用已删除函数SMFLsetup c:\ users \ 808hunterz records \ source \ repos \ smflsetup \ smflsetup \ smflsetup.cpp 41
答案 0 :(得分:4)
此行
for (auto sprite : floor)
试图将每个unique_ptr
一张一张地复制到sprite
中,并且unique_ptr
不可复制。
使用
for (auto &sprite : floor)
相反。
答案 1 :(得分:0)
sf::Sprite
是轻量级的,您不需要使用std::unique_ptr<sf::Sprite>
,只需直接使用sf::Sprite
:std::vector<sf::Sprite> floor;
std::vector<sf::Sprite> floor;
...
floor.push_back(sf::Sprite());
floor[i].set...
...
for (auto const& sprite : floor)
window.draw(sprite);