所以我有一个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);
答案 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>());