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

Sir*_*lot 1 c++

我在'vector'类中出现错误,比如你在#include <vector>时访问的类

我得到的错误主要是:

错误1错误C2259:'Gun':无法实例化抽象类

这个类,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());
    }
Run Code Online (Sandbox Code Playgroud)

thi*_*ton 5

声明为的矢量

std::vector<Gun>
Run Code Online (Sandbox Code Playgroud)

将仅包含Gun对象.如果你试图放置一个派生自Gun的实例,那么该对象将被切成其Gun部分,这是抽象的.您需要在向量中存储指向动态分配副本的指针,例如

std::vector<Gun*>
Run Code Online (Sandbox Code Playgroud)

为了省去解除引用和删除逻辑,使用boost的指针容器:

#include <boost/ptr_container/ptr_vector.hpp>
boost::ptr_vector<Gun>
Run Code Online (Sandbox Code Playgroud)