gpt4 book ai didi

c++ - 为什么我无法创建唯一指针

转载 作者:行者123 更新时间:2023-12-01 14:33:27 26 4
gpt4 key购买 nike

当我尝试创建一个唯一指针时出现 c2664 错误

我确实写了复制构造函数和赋值运算符,但我仍然不断收到 2664 错误

class UndoCopyPaste : public UndoRedo
{
private:
Container containerValue;
bool valid;
public:
UndoCopyPaste() = default;
UndoCopyPaste(Container* cont, std::string type);
UndoCopyPaste(Container trans, Container* cont, std::string type);

};

class UndoRedo
{
private:
std::string type;
protected:
Container* container;
public:
UndoRedo() = default;
UndoRedo(Container* cont, std::string undoType);
};

std::unique_ptr<UndoCopyPaste> undoCopyPastePointer = std::make_unique<UndoCopyPaste>(new UndoCopyPaste()); // error C2664: 'UndoCopyPaste::UndoCopyPaste(UndoCopyPaste &&)': cannot convert argument 1 from '_Ty' to 'const UndoCopyPaste &'

最佳答案

此代码带有make_unique:

x = std::make_unique<Foo>(a, b);

本质上等同于:

x = std::unique_ptr<Foo>(new Foo(a, b));

请注意,传递给 make_uniquea, b 会直接传递给 Foo 的构造函数。所以你的代码

std::make_unique<UndoCopyPaste>(new UndoCopyPaste()); 

等同于:

std::unique_ptr<UndoCopyPaste>(new UndoCopyPaste(new UndoCopyPaste())); 

您实际上是将 new UndoCopyPaste() 传递给 UndoCopyPaste 的构造函数!因此,只需完全删除该参数即可:

std::make_unique<UndoCopyPaste>(); 

关于c++ - 为什么我无法创建唯一指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62635894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com