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

时间:2014-08-01 21:53:48

标签: c++ vector

所以我有一个Truck对象,其中包含一个包含包的向量。我正在创建一个Letter,它是包的子类,并且想要添加它。当我尝试使用向向量添加一个字母时出现错误

这是我的主要类,其中已初始化字母

main()的

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

这就是在truck.h档案中的样子

truck.h

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

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

2 个答案:

答案 0 :(得分:2)

push_back指针Letter*,但向量包被定义为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);

这样,您就不必进行手动释放等。

答案 1 :(得分:2)

您的向量被声明为按值Package对象。由于letter是{em>指针到Letter对象,因此类型将不匹配,从而导致错误。更改矢量的类型以取Letter*

std::vector<Package*> packages;

此外,建议您使用内存管理容器以避免内存泄漏(例如忘记delete,因为它似乎已经完成)并且便于手动内存管理。标准提供的这种容器是std::shared_ptr<>

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