将结构存储在数组中(C++)

Posted

技术标签:

【中文标题】将结构存储在数组中(C++)【英文标题】:storing struct in array (C++) [duplicate] 【发布时间】:2016-10-23 21:31:34 【问题描述】:

我是 C++ 的新手,我遇到了将结构存储在数组中的问题。我已经搜索了有关此问题的板,但似乎没有人遇到我的具体问题。

我正在创建一个基于文本的 RPG 游戏,它需要一个动态的法术数组。咒语是结构体,定义如下:-

struct spell

    std::string mSpellName;
    int mRequiredMagicPoints;
;

然后我创建并初始化结构的两个实例:-

spell fireBall "Fire Ball", 10;
spell magicMissile "Magic Missile", 5;

然后,在 main() 中,我尝试将这两个实例存储在一个向量数组中:-

int main()

    std::vector<spell> mSpells[2];

    mSpells[0] = fireBall;
    mSpells[1] = magicMissile;

但是,Xcode 冲我大喊“没有可行的重载 '='”

我也尝试将这些结构存储在传统的动态数组中,但仍然无法编译。我做错了什么?

提前致谢!

【问题讨论】:

C is not C++ is not C. 不要使用错误的标签。 也许你的意思是 std::vector&lt;spell&gt; mSpells(2); ,一个包含 2 个元素的向量。你实际写的是一个由 2 个空向量组成的数组 push_back 【参考方案1】:

std::vector&lt;spell&gt; mSpells[2]; 定义一个向量数组。看来您只需要一个包含两个元素的向量。所以你开始但只是定义一个向量:

std::vector<spell> mSpells;

那么你有 several options 来添加元素:

mSpells.push_back(fireBall);
mSpells.emplace_back("Magic Missile", 5);

【讨论】:

【参考方案2】:

您声明了一个包含两个vectors 和spells 的数组。你显然只想要一个vector,所以你想说:

vector<spell> mSpells(2);

这还将初始化 mSpells 以具有两个默认构造的元素。

你可能还想写:

vector<spell> mSpells;
mSpells.reserve(2); // optional, good idea
mSpells.push_back(fireBall);
mSpells.push_back(magicMissile);

【讨论】:

以上是关于将结构存储在数组中(C++)的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 构造函数中为结构数组分配存储[关闭]

数据结构(C++)——第四章 字符串和多维数组

C++ 炼气期之数组探幽

数据结构(C++)笔记:04.字符串与多维数组

C++ 如何将一个静态结构体数组初始化?

如何将字符串(来自具有 n 行数的文件)存储在动态数组中? C++