Vector of unique pointers错误,初始化后无法引用

Vector of unique pointers error, cannot be referenced after initialization

我正在尝试在 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>> &)': attempting to reference a deleted function

这一行

for (auto sprite : floor)

尝试将每个 unique_ptr 一个一个地复制到 sprite,并且 unique_ptr 不可复制。

使用

for (auto &sprite : floor)

相反。

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