C++ 唯一指针错误的向量,初始化后无法引用

C++ 唯一指针错误的向量,初始化后无法引用,c++,sfml,unique-ptr,C++,Sfml,Unique Ptr,我试图在SFML中创建一个矩形矩阵,使它们看起来像地板。为此,我想使用唯一指针的向量。然而,似乎有一个错误,我不太明白 在成功初始化向量后,它将在同一个函数中声明为已删除。当我使用new或共享指针执行类似的实现时,没有问题 导致此错误的原因是什么?我如何修复它?发生地点如下所示: 代码: sf::纹理; texture.loadFromFile(“./resources/wood.jpg”); 病媒层; 无符号计数器=0; 浮点posX=0.f,posY=0.f; 对于(int i=0;iset

我试图在SFML中创建一个矩形矩阵,使它们看起来像地板。为此,我想使用唯一指针的向量。然而,似乎有一个错误,我不太明白

在成功初始化向量后,它将在同一个函数中声明为已删除。当我使用
new
或共享指针执行类似的实现时,没有问题

导致此错误的原因是什么?我如何修复它?发生地点如下所示:

代码:

sf::纹理;
texture.loadFromFile(“./resources/wood.jpg”);
病媒层;
无符号计数器=0;
浮点posX=0.f,posY=0.f;
对于(int i=0;i<50;i++){
地板。推回(std::make_unique());
地板[i]>setTexture(纹理);
地板[i]->setTextureRect(sf::IntRect(1,1100,100));
地板[i]->设置位置(sf::Vector2f(posX,posY));
计数器++;
posX+=100.f;
如果(计数器==10){
posY+=100.f;
posX=0.f;
计数器=0;
}
}
while(window.isOpen()){
sf::事件eH;
用于(自动和精灵:地板)
window.draw(*sprite.get());
while(window.polleevent(eH)){
如果(eH.type==sf::Event::Closed)
window.close();
if(eH.type==sf::Event::keyreased&&eH.key.code==sf::Keyboard::Escape)
window.close();
如果(eH.type==sf::Event::Resized)
glViewport(0,0,eH.size.width,eH.size.height);
}
window.display();
窗口。清除(sf::颜色::黑色);
错误说明:

'std::unique_ptr::unique_ptr(const std::unique_ptr&'):尝试引用已删除的函数

这条线

for (auto sprite : floor)
尝试将每个
unique\u ptr
逐个复制到
sprite
中,并且
unique\u ptr
不可复制

使用


相反。

sf::Sprite
是轻量级的,您不需要使用
std::unique\u ptr
,只需直接使用
sf::Sprite
std::vector floor;

std::vector<sf::Sprite> floor;
...
floor.push_back(sf::Sprite());
floor[i].set...
...
for (auto const& sprite : floor)
    window.draw(sprite);
std::向量地板;
...
地板。推回(sf::Sprite());
楼层[i]。设置。。。
...
用于(自动构造和精灵:地板)
窗口。绘制(精灵);

请不要发布“格式化代码的PNG”,而是发布您的代码。添加代码,而不是代码的屏幕截图。并复制粘贴完整的错误输出(以及代码)。请花时间阅读,然后阅读相应的问题。请创建并给出示例输入、输出和您收到的错误消息(如果有)。这将帮助我们确定发生了什么,并提高您获得答案的机会。好的,我会在再次问问题时记住这一点。是的,就是这样,唯一的p蕾丝:我还没有尝试过添加修饰语char:)Ty@2137Pablo如果这回答了您的问题,请单击左侧的绿色勾号,将您的问题标记为已解决。您的意思是什么?所示示例中没有指针。这实际上也是一个很好的方法,因为之前有一些问题导致我使用指针,所以我最终会这样。
for (auto &sprite : floor)
std::vector<sf::Sprite> floor;
...
floor.push_back(sf::Sprite());
floor[i].set...
...
for (auto const& sprite : floor)
    window.draw(sprite);