如何在向量中存储多个类的不同对象?
Posted
技术标签:
【中文标题】如何在向量中存储多个类的不同对象?【英文标题】:How to store multiple class's different objects inside of a vector? 【发布时间】:2017-05-29 21:13:19 【问题描述】:所以我的代码我想创建一个向量,它接受来自“PLATFORM”派生类的任何对象。 所以平台是我的基类,我有书籍、游戏、电视节目和其他东西。我想把所有这些都放在一个向量中。需要这样做,所以没有其他办法。
所以我想要一个向量包含...来自书籍的对象、来自游戏的对象等... 我一直在论坛上阅读,我一直看到有人建议使用 boost::any 或 boost::variant。我目前正在尝试避免使用 boost。
我看到了多个建议,例如... 做类似的事情
Book tmpBook;
tmpBook.setName("ERAGON");
//I do the above just to get a object to use
vector<Platforms*> platforms
platforms.push_back(tmpBook)
cout << platforms.at(0).getName() << endl;
我希望看到它打印出 ERAGON,但我收到了一个错误... 错误:在 'platforms.std::vector<_tp _alloc>::at >(0u)' 中请求成员 'getName',它是指针类型的......从这里开始。
我觉得我在这里遗漏了一些非常重要的东西,所以请帮忙!
我的类是通过基类“Platform”简单地设置的,它带有一个 getName() 和 setName() 虚拟方法以及一个受保护的字符串名称变量。
派生类基本上只有其类的 setName() 和 getName() 版本。
稍后,我计划添加更多详细信息,以进一步定义每个类,并为其各自的对象提供更多定义功能。就像一本书有页码之类的......
我也看到了使用sharedptr的建议,但是看起来好复杂……
【问题讨论】:
cout << platforms.at(0)->getName() << endl;
谢谢 πάντα ῥεῖ,这正是我所缺少的,感谢您的帮助。
【参考方案1】:
试试
Vector<Platforms> platforms
我不明白你为什么在向量中使用指针
【讨论】:
“我不明白你为什么在向量中使用指针” 因为Platforms
是问题中所述的(可能是抽象的)基类。
有时您似乎很难从一开始就发布 cmets,但不要为此滥用问题。赢得发布 cmets 的权利。以上是关于如何在向量中存储多个类的不同对象?的主要内容,如果未能解决你的问题,请参考以下文章