我正在尝试为两种类型的用户创建一个向量。 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);
}
答案 0 :(得分:1)
尝试将createAdmin更改为此:
void UserManager::createAdmin(Admin admin)
{
users.push_back( std::make_unique<Admin>(admin) );
}
push_back
中的 vector<T>
想要const T&
或(在这种情况下)是T&&