将派生 class 对象添加到基础 class 的向量 <unique_ptr>
Adding derived class object to vector<unique_ptr> of base class
所以在我的代码中,我试图将 unique_ptr
添加到从 derived
class 到 vector
的对象中 class。我收到此错误:
E0304 no instance of overloaded function "std::vector<_Ty, _Alloc>::push_back [with _Ty=std::unique_ptr<Organism, std::default_delete<Organism>>, _Alloc=std::allocator<std::unique_ptr<Organism, std::default_delete<Organism>>>]" matches the argument list
基础class的代码(如果您需要更多请告诉我,尽量少放代码):
vector<unique_ptr<Organism>> World::generate_organisms(int act_level)
{
vector<unique_ptr<Organism>> organism_list = get_vector();
coordinates sheep_pos(10, 2);
//getting error in next line
organism_list.push_back(make_unique<Sheep>(sheep_pos, *this));
return organism_list;
}
派生代码class:
.h
文件
class Sheep : Organism
{
Sheep( coordinates organism_pos, World* world);
};
.cpp
文件
Sheep::Sheep( coordinates organism_pos, World* act_world)
:
Organism(organism_pos, act_world)
{
this->armor = 0;
this->damage = 2;
this->health = 10;
this->vigor = 10;
}
类似于 class
的默认成员可见性是 private
,继承也是 private
,除非另有说明。您需要从 Organism
public
ly 继承,以便 std::unique_ptr
能够看到并执行您期望的转换。
class Sheep : public Organism {
public:
Sheep( coordinates organism_pos, World* world);
}
您的构造函数也需要 public
以便 std::make_unique
可以看到和使用它。
所以在我的代码中,我试图将 unique_ptr
添加到从 derived
class 到 vector
的对象中 class。我收到此错误:
E0304 no instance of overloaded function "std::vector<_Ty, _Alloc>::push_back [with _Ty=std::unique_ptr<Organism, std::default_delete<Organism>>, _Alloc=std::allocator<std::unique_ptr<Organism, std::default_delete<Organism>>>]" matches the argument list
基础class的代码(如果您需要更多请告诉我,尽量少放代码):
vector<unique_ptr<Organism>> World::generate_organisms(int act_level)
{
vector<unique_ptr<Organism>> organism_list = get_vector();
coordinates sheep_pos(10, 2);
//getting error in next line
organism_list.push_back(make_unique<Sheep>(sheep_pos, *this));
return organism_list;
}
派生代码class:
.h
文件
class Sheep : Organism
{
Sheep( coordinates organism_pos, World* world);
};
.cpp
文件
Sheep::Sheep( coordinates organism_pos, World* act_world)
:
Organism(organism_pos, act_world)
{
this->armor = 0;
this->damage = 2;
this->health = 10;
this->vigor = 10;
}
类似于 class
的默认成员可见性是 private
,继承也是 private
,除非另有说明。您需要从 Organism
public
ly 继承,以便 std::unique_ptr
能够看到并执行您期望的转换。
class Sheep : public Organism {
public:
Sheep( coordinates organism_pos, World* world);
}
您的构造函数也需要 public
以便 std::make_unique
可以看到和使用它。