Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.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++ Can';你似乎没有把抽象的对象推回向量?_C++_Vector_Data Structures_Abstract Class_Unique Ptr - Fatal编程技术网

C++ Can';你似乎没有把抽象的对象推回向量?

C++ Can';你似乎没有把抽象的对象推回向量?,c++,vector,data-structures,abstract-class,unique-ptr,C++,Vector,Data Structures,Abstract Class,Unique Ptr,我试图为两种类型的用户创建一个向量。Admin和Customer都是从抽象类BaseUser派生的。然而,我尝试了一些网上提供的答案,但我似乎无法做到这一点。我不断收到错误:使用删除函数'std::unique_ptr尝试将createAdmin更改为: void UserManager::createAdmin(Admin admin) { users.push_back( std::make_unique<Admin>(admin) ); } void UserM

我试图为两种类型的用户创建一个向量。Admin和Customer都是从抽象类BaseUser派生的。然而,我尝试了一些网上提供的答案,但我似乎无法做到这一点。我不断收到
错误:使用删除函数'std::unique_ptr尝试将createAdmin更改为:

void UserManager::createAdmin(Admin admin)
{   
    users.push_back( std::make_unique<Admin>(admin) );
}
void UserManager::createAdmin(Admin-Admin)
{   
push_back(std::make_unique(admin));
}

push_
一个
向量
需要一个
常数T&
或(在本例中)一个
T&

@Ron这与零规则(或更小的变化)关系不大,说明在实现其他特殊功能时应实现哪些特殊功能。您正在将值类型
Admin
推送到
unique\ptr
vector
。您应该(通过移动)推送一个
unique\u ptr
(这将自动转换为
unique\u ptr
)!为什么不更改参数以获得唯一的\u ptr?@AdrielJr:我想显示
make\u unique
的用法,并进行最小的更改。我在这里看到了许多admin副本:首先是按值传递admin,然后是基于admin创建唯一指针。另外,由于c++11,我总是使用emplace_back。在这种情况下,它不应该有任何区别,因为它是指针的向量,但在处理对象时,它可能会避免另一个副本。
#ifndef ADMIN_H
#define ADMIN_H

#include "BaseUser.h"

class Admin : public BaseUser
{
    public:
        Admin(std::string fullname,std::string username,std::string password);

        void setIsAdmin(bool isAdmin); 
        bool getIsAdmin();
};

#endif
#ifndef USERMANAGER_H
#define USERMANAGER_H

#include "Admin.h"
#include "Customer.h"
#include <vector>
#include <memory>

class UserManager
{
    private:
        std::vector<std::unique_ptr<BaseUser>> users;
        bool isAuthenticated;

    public:
        std::vector<std::unique_ptr<BaseUser>> getUsers();

        bool login(std::string name, std::string password);
        bool logout();

        void createAdmin(Admin);
        // void createCustomer(Customer);

};

#endif
void UserManager::createAdmin(Admin admin))
{   
    users.push_back( move(admin) )
}
// View.cpp

Admin View::createAdminView()
{
    string fullname, username, password;

    cout << "~ Register Admin ~" << endl << endl;

    cout << "Name: ";
    cin.ignore();
    getline(cin, fullname);

    cout << "Username: ";
    cin >> username;

    cout << "Password: ";
    cin >> password;

    return Admin(fullname, username, password);
}
void UserManager::createAdmin(Admin admin)
{   
    users.push_back( std::make_unique<Admin>(admin) );
}