我在'vector'类中遇到错误,例如,当您#include<时,您访问的类矢量>
我得到的错误主要是:
错误1错误C2259:'枪':无法实例化抽象类
这个类,Gun,确实是抽象的,但是我已经检查了代码,并且在任何地方都没有尝试创建它的实例。有什么,是
的一些定义矢量<枪>等等;
作为将由派生类填充的类实例成员,以便我可以使用它们的多态函数。
虽然我无法访问矢量类来改变它(即使我可能不想这样做),我可以看到错误发生在它的代码的哪一部分:
该块的第一行:
void resize(size_type _Newsize, _Ty _Val)
{ // determine new length, padding with _Val elements as needed
if (size() < _Newsize)
_Insert_n(end(), _Newsize - size(), _Val);
else if (_Newsize < size())
erase(begin() + _Newsize, end());
}
答案 0 :(得分:5)
声明为
的向量std::vector<Gun>
将仅包含Gun对象。如果你试图放置一个派生自Gun的实例,那么该对象将被切成其Gun部分,这是抽象的。您需要在向量中存储指向动态分配副本的指针,例如
std::vector<Gun*>
为了省去解除引用和删除逻辑,请使用boost的指针容器:
#include <boost/ptr_container/ptr_vector.hpp>
boost::ptr_vector<Gun>
答案 1 :(得分:2)
你不能,因为当你做矢量时,你正在创建那种类型的对象 在我认为你需要做的事情
Ak47 *gun1 = new Ak47(ammo);
vector<Gun*> guns;
guns[0]=&*gun1;
答案 2 :(得分:1)
std::vector
持有按值对象,因此Gun对象将被实例化,这就是您收到错误的原因。