错误
e / c ++ / v1 /算法:642: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:321:9:错误:
字段类型'Space'是一个抽象类 _T2秒; ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c ++ / v1 / map:624:16:注意:
问题
如何定义类型为std::vector
的{{1}},这是一个抽象类,然后用派生类Space
,Empty
,{{ 1}}。
上下文
我知道C ++中的抽象类无法实例化。相反,我在该站点和其他站点上已经读过几篇文章,如果该类型定义为星型Snake
指针或任何Ladder
托管指针数据,则可以创建一个抽象类型的集合*
之类的类型。我尝试使用<memory>
,但仍然无法正确定义集合。我使用std::unqiue_ptr<T>
编译了代码。
代码
shared_ptr<Space>
答案 0 :(得分:1)
您似乎已经删除了很多代码,以在此处了解详细信息。
有一个Space
指针(智能或原始)。实例化所需的特定空间,并使用类型Space
的指针指向该空间。示例std::shared_ptr<Space> pointerToSpace = std::make_shared<Snake> ("I'm a snake");
现在,在不失一般性的情况下,您可以仅使用指向空格pointerToSpace->class_type()
的指针来打印内容(具体类型)。是的,您可以在一个容器中收集shared_ptr
的集合。