将包添加到对象内的包向量中

adding package to a vector of packages inside an object

本文关键字:包向量 向量 包添加 添加 对象      更新时间:2023-10-16

所以我有一个Truck对象,它包含一个存放包的向量。我正在创建一个Letter,这是一个子类的包,并想添加到它。当我尝试在向量上添加一个字母时,我得到了一个错误

这是初始化了字母的主类

main ()

Letter *letter = new Letter();
trucks.packages.push_back(letter);

在truck.h文件

truck.h

std::vector<Package> packages;初始化为public

我得到的错误是no matching function for call to std::vector<Package>::push_back(Letter*&)’ truck.packages.push_back(letter);

push_back一个指针Letter*,但vector包被定义为Package的容器,而不是Package*

定义
std::vector<Package*> packages;

最好是使用智能指针std::shared_ptr<Package>std::unique_ptr<Package>代替原始指针,例如

std::vector<std::shared_ptr<Package> > packages;
std::shared_ptr<Letter> letter(new Letter());
trucks.packages.push_back(letter);

这样,你就不需要手动的去分配等等

您的向量被声明为按值接受Package对象。由于letter是指向Letter对象的指针,因此类型不匹配,从而导致错误。把vector的类型改成Letter*:

std::vector<Package*> packages;

此外,建议您使用内存管理容器,以避免内存泄漏(例如当忘记delete时,似乎您已经这样做了),并促进手动内存管理。标准提供的这种容器是std::shared_ptr<>:

std::vector<std::shared_ptr<Package>> packages;
packages.push_back(std::make_shared<Package>());