我有一个World类,其中有一个向量,该向量持有指向Tile类的唯一指针。 World有一个get函数,该函数返回对Vector持有的unique_ptr的引用。
#include <memory>
#include <vector>
#include "Tile.h"
class World
{
public:
std::unique_ptr<Tile>& get(unsigned int i) { return Vector[i]; }
private:
std::vector<std::unique_ptr<Tile>> Vector;
}
我想用重载运算符替换get函数:
std::unique_ptr<Tile>& operator[](unsigned int i) { return Vector[i]; }
但是当我致电World [i]时,出现以下错误:
error C2280: 'std::unique_ptr<Tile,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)': attempting to reference a deleted function with[_Ty=Tile]
我在做什么错了?
答案 0 :(得分:1)
问题不在您发布的代码段之内。相反,将pattern="world!"
text="hello world! this is python"
def find_variabel(pattern,text):
new_text=text.split(' ')
for x in range(len(new_text)):
if new_text[x]==pattern:
return new_text[x+1]
print (find_variabel(pattern,text))
的返回值绑定到变量的方法很重要。该代码将失败,
operator[]
,因为它尝试复制World worldInstance;
// fill the Vector in worldInstance with elements...
auto element = worldInstance[0];
对象。 std::unique_ptr<Tile>
是仅移动类型,因此编译器抱怨成员函数(副本构造函数)已删除。您可以捕获返回值作为参考,
std::unique_ptr
或直接通过以下方式检索对指向对象的引用
auto& element = worldInstance[0];