锁定的'vector'文件中的错误

时间:2011-11-09 17:05:58

标签: c++

我在'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());
    }

3 个答案:

答案 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对象将被实例化,这就是您收到错误的原因。