C++ 正在尝试将用户定义的向量类型插入到用户定义的类型向量中

C++ 正在尝试将用户定义的向量类型插入到用户定义的类型向量中,c++,struct,class-design,game-development,C++,Struct,Class Design,Game Development,我正在尝试在一个小RPG战斗模拟的咒语系统中制作一个向量向量。我试图实现的主要目标是拥有一个咒语向量,玩家可以访问并选择他们想要施放的咒语类型:火、冰等,然后选择咒语名称:烧、霜等 下面的代码是我声明的拼写和FireSpell。我试图将一个火咒语向量插入到向量咒语类型的向量中,但是,它不会插入。有没有办法让它插入 我尝试过将火咒语向量推回到向量咒语中,效果很好,但是,当我将火咒语向量推回到向量咒语类型的向量中时,它总是返回一个错误 魔法 struct Fire { int damage;

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

下面的代码是我声明的拼写和FireSpell。我试图将一个火咒语向量插入到向量咒语类型的向量中,但是,它不会插入。有没有办法让它插入

我尝试过将火咒语向量推回到向量咒语中,效果很好,但是,当我将火咒语向量推回到向量咒语类型的向量中时,它总是返回一个错误

魔法

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;
}
拥有


由于
向量
不是
向量

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


在C++中,对象不是引用:它们是内存中的实际对象,这要求它们具有已知的编译时间大小。不过,您仍然可以通过指针或引用轻松创建多态集合,甚至可以创建没有公共接口的对象集合;但是,您必须明确这一点——并了解语言规则,以防止类似gotchas的切片(例如,请参阅)。

unique\u ptr
在继承方面做得更好一些,这可能值得研究
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
vector<vector<Spell>> PlayerSpells;
vector<FireSpell> PlayerFSpells;
PlayerSpells.push_back(PlayerFSpells);