尝试将用户定义的Vector类型插入用户定义的Vectors中

时间:2019-05-26 15:41:27

标签: c++ struct class-design game-development

我正在尝试在一个小型RPG战斗模拟的咒语系统中创建矢量的矢量。我要实现的主要目标是拥有一个向量咒语,玩家可以访问并选择他们想施放的咒语类型:火,冰等,然后选择咒语的名称:燃烧,冰霜,等

以下代码是我将Spell和FireSpell声明为的代码。我正在尝试将FireSpells的向量插入类型为vector的向量的向量中,但是不会插入。有没有办法使其插入?

我已经将FireSpell上的push_back尝试到Spells的向量中,并且工作正常,但是,当我将FireSpell矢量推入到vector Spell类型的向量中时,它总是返回错误。

Magic.h

struct Fire
{
    int damage;
    int dps;
}; 

struct Spell
{
    int cost;
    string name;
};

struct FireSpell : Spell, Fire
{

};

Magic.cpp

#include <iostream>
#include "MagicSys.h"
#include <vector>
#include <string>
#include "Magic.h"

using std::cout;
using std::vector;

FireSpell burn;
FireSpell inferno;
FireSpell volcano;


int mainfunc()
{
    vector<vector<Spell>> PlayerSpells;
    vector<FireSpell> PlayerFSpells;
    PlayerFSpells.push_back(burn);
    PlayerFSpells.push_back(inferno);
    PlayerFSpells.push_back(volcano);

 /*Trying to insert FireSpell Vector into the end of the vector of Spell vectors*/

    PlayerSpells.push_back(PlayerFSpells);

    vector<vector<Spell>>::iterator it;
    for (it = PlayerSpells.begin(); it!=PlayerSpells.end(); ++it)
        cout << &it << " ";

    return 0;
}

我希望内部FireSpell向量插入到PlayerSpells.push_back(PlayerFSpells);行的外部Spell向量中,但是,它给了我错误消息:

no instance of overloaded function "std::vector<_Ty, _Alloc>::push_back
[with _Ty=std::vector<Spell, std::allocator<Spell>>,
_Alloc=std::allocator<std::vector<Spell, std::allocator<Spell>>>]"
matches the argument list

2 个答案:

答案 0 :(得分:1)

如果您来自其他语言,则可能会将可变值视为隐式引用。在这些语言中,通常可以轻松构造不同类型的集合,这些集合可以共享一个接口,也可以不共享一个接口,并且可以或可以不对它们进行多态处理(后期绑定)。

但是,在C ++中,对象不是引用:它们是内存中的实际对象,这要求它们具有编译时已知的大小。但是,您仍然可以通过指针或引用轻松地创建多态集合,甚至可以包含没有公共接口的对象集合。但是您必须对此加以明确说明-并且知道该语言的规则以防止出现诸如切片之类的陷阱(例如,参见What is object slicing?)。

答案 1 :(得分:0)

拥有

vector<vector<Spell>> PlayerSpells;
vector<FireSpell> PlayerFSpells;

你不能做

PlayerSpells.push_back(PlayerFSpells);

因为vector<FireSpell>不是vector<Spell>