C++ 使用指向<;的唯一指针向量;员工>;矢量

C++ 使用指向<;的唯一指针向量;员工>;矢量,c++,pointers,vector,ostream,C++,Pointers,Vector,Ostream,对于学校作业,我尝试使用指向Employee对象的唯一指针向量来访问Employee数据,但无法找出语法/编译器错误。谁能告诉我我做错了什么?必须以这种方式使用智能指针向量 以下是适用的代码: // Create an Employee Employee EmpRec; // Assign value to a uniqueptr unique_ptr<Employee> TempEmp; *TempEmp = EmpRec; // Create a vector of uniq

对于学校作业,我尝试使用指向Employee对象的唯一指针向量来访问Employee数据,但无法找出语法/编译器错误。谁能告诉我我做错了什么?必须以这种方式使用智能指针向量

以下是适用的代码:

// Create an Employee
Employee EmpRec;

// Assign value to a uniqueptr
unique_ptr<Employee> TempEmp;
*TempEmp = EmpRec;

// Create a vector of unique_ptr<Employee>
vector<unique_ptr<Employee>> EmpVect;

// Push the TempEmp pointer onto the vector
EmpVect.push_back(TempEmp);

// Iterate through vector, calling display function 
//that prints the values of various data inside the Employee object
for (size_t i = 0; i < EmpVect.size(); ++i){
    (EmpVect[i])->display(cout);
}
//创建员工
雇员EmpRec;
//将值赋给一个uniqueptr
独特的ptr TempEmp;
*TempEmp=EmpRec;
//创建一个唯一的向量
向量EmpVect;
//将TempEmp指针推到向量上
EmpVect.推回(TempEmp);
//遍历向量,调用display函数
//它打印Employee对象内各种数据的值
对于(大小i=0;i显示(cout);
}
以下是我的显示功能的定义:

void display(std::ostream& cout) const{
    // print data members using cout <<
}
void显示(std::ostream&cout)常数{

//使用cout调用
push_back
打印数据成员,这样会尝试将
唯一的ptr
复制到向量中。您不能复制
唯一的ptr
s!相反,您需要将其移动到向量中:

EmpVect.push_back(std::move(TempEmp));
但是,您确实有另一个问题。您的
unique\u ptr
未初始化为指向任何特定分配的
Employee
,但您随后尝试分配给该对象。这不好。相反,您应该动态分配
Employee
,并将其传递给
unique\u ptr
构造函数:

unique_ptr<Employee> TempEmp(new Employee());
unique_ptr TempEmp(新员工());

或者最好使用(在C++14中可用)。

您也可以使用EmpVect.emplace_back(TempEmp)@DaliborFrivaldsky您可以?非常确定您仍然需要
std::move
它。是的,您是对的,它需要是EmpVect.emplace_back(std::move(TempEmp)),可能是