c++ - 唯一指针向量错误,初始化后无法引用
问题描述
我正在尝试在 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);
错误描述:
'std::unique_ptr<sf::Sprite,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)':试图引用已删除的函数
解决方案
这条线
for (auto sprite : floor)
试图将每一个一个一个复制unique_ptr
成sprite
一个,并且unique_ptr
s 是不可复制的。
利用
for (auto &sprite : floor)
反而。
推荐阅读
- javascript - Node.js如何获取以前的网址
- vba - 删除数字(随机)和分号 ( ; ) 之间的空格
- python - pandas 中以下两个 groupby() 语句有什么区别?
- python-3.x - 服务器返回 b'\xe....' 而不是时间协议的实际时间
- sql - 什么是与 a.key IS NULL 和 b.key IS NULL 的 FULL OUTER JOIN 等效的 MS Access SQL
- wordpress - register_activation_hook 可调用函数未被调用
- python - 如果 Django-admin 页面中的值为 null,则自引用外键将列出所有内容
- bash - 我如何获得 Joomla K2 Image 问题 HASH 的解决方案
- python - Having a 404 error on my second url using tornado. Why is this happening?
- php - PDO sql 请求出错((我知道错误在哪里,但不明白它想从我这里得到什么(