c++ - 似乎无法将抽象对象推回向量中?
问题描述
我正在尝试为两种类型的用户创建一个向量。Admin 和 Customer 都派生自抽象类 BaseUser。但是我尝试了一些在线提供的答案,但我似乎无法完成这项工作。我不断得到error: use of delete function 'std::unique_ptr<...
。
我仍在努力完全掌握指针的概念,所以这可能就是我遇到这个问题的原因。
#ifndef BASEUSER_H
#define BASEUSER_H
#include <string>
class BaseUser
{
private:
int id;
int idCounter = 0;
std::string fullname;
std::string username;
std::string password;
protected:
bool isAdmin;
public:
BaseUser();
BaseUser(std::string fullname, std::string username, std::string password);
virtual void setIsAdmin(bool isAdmin) = 0;
void setID(int id);
void setFullname(std::string fullname);
void setUsername(std::string username);
void setPassword(std::string password);
unsigned long int getID();
std::string getFullname();
std::string getUsername();
std::string getPassword();
};
#endif
#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
usermanager 类中的对象创建方法声明:
void UserManager::createAdmin(Admin admin))
{
users.push_back( move(admin) )
}
我也尝试使用 推make_unique
,但仍然是同样的错误。
将对象返回给 createAdmin() 方法的视图:
// 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);
}
解决方案
尝试将 createAdmin 更改为:
void UserManager::createAdmin(Admin admin)
{
users.push_back( std::make_unique<Admin>(admin) );
}
push_back
一个vector<T>
想要一个const T&
或(在这种情况下)一个T&&
推荐阅读
- azure - 使用 terraform 在 Azure APIM api 中创建新操作
- node.js - “top”命令中的nodejs max-old-space-size 和 VSZ
- eclipse - 我有问题,cmd无法编译build.gradle
- .net - oracle 19c 和 .net (mvc) 之间的兼容性
- phpspreadsheet - PHPSpreadsheet条形图 - 在模板中定义X轴时无法打开生成的电子表格
- python - 对文本内的所有数字进行操作
- react-transition-group - 如何淡出一个反应组件,然后淡入另一个?
- html - 将引导范围颜色更改为十六进制颜色?
- xamarin - 尝试从导航返回 bool 时从 5.x 更新到 8.0.2 后关闭和导航编译错误
- elasticsearch - 使用 searchAfter(jump to a specific page,) 从大堆栈的中间获取数据