如何在向量中存储多个类的不同对象?

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 &lt;&lt; platforms.at(0)-&gt;getName() &lt;&lt; endl; 谢谢 πάντα ῥεῖ,这正是我所缺少的,感谢您的帮助。 【参考方案1】:

试试

Vector<Platforms> platforms

我不明白你为什么在向量中使用指针

【讨论】:

“我不明白你为什么在向量中使用指针” 因为Platforms 是问题中所述的(可能是抽象的)基类。 有时您似乎很难从一开始就发布 cmets,但不要为此滥用问题。赢得发布 cmets 的权利。

以上是关于如何在向量中存储多个类的不同对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何将来自先前类的值存储到 C++ 中的向量中?

C ++跨类访问基对象向量中的派生对象的引用

如何在 C++ 中将一个对象从一个向量复制到另一个向量?

如何创建包含对象的向量?

如何从多个文本框输入中读取字符串并将它们存储在 Shiny 中的向量中?

如何将对象存储在向量中的对象中? (C++)