Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我不能创建唯一指针_C++_C++11_C++14 - Fatal编程技术网

C++ 为什么我不能创建唯一指针

C++ 为什么我不能创建唯一指针,c++,c++11,c++14,C++,C++11,C++14,当我试图创建一个唯一的指针时,我得到了c2664错误 我确实编写了复制构造函数和赋值运算符,但仍然不断出现2664错误 class UndoCopyPaste : public UndoRedo { private: Container containerValue; bool valid; public: UndoCopyPaste() = default; UndoCopyPaste(Container*

当我试图创建一个唯一的指针时,我得到了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 &'
类UndoCopyPaste:公共UndoRedo
{
私人:
集装箱价值;
布尔有效;
公众:
UndoCopyPaste()=默认值;
撤消复制粘贴(容器*cont,std::字符串类型);
UndoCopyPaste(容器传输,容器*cont,标准::字符串类型);
};
类撤消重做
{
私人:
std::字符串类型;
受保护的:
集装箱*集装箱;
公众:
UndoRedo()=默认值;
UndoRedo(容器*cont,std::字符串undoType);
};
std::unique_ptr undoCopyPastePointer=std::make_unique(新的UndoCopyPaste());//错误C2664:“UndoCopyPaste::UndoCopyPaste(UndoCopyPaste&&)”:无法将参数1从“\u Ty”转换为“const UndoCopyPaste&”

此代码与
一起使用,使\u唯一

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

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

因为
new UndoCopyPaste()
是一个右值。删除新操作符,您的意思是
auto-undocypestpointer=std::make_unique()关于回滚编辑,C++标签不是没有必要的,因为这是C++问题。此外,OP可以自由指定其代码需要支持的标准版本。
std::unique_ptr<UndoCopyPaste>(new UndoCopyPaste(new UndoCopyPaste())); 
std::make_unique<UndoCopyPaste>();