2016-10-23 12 views
3

私はC++にはかなり新しく、構造体を配列に格納することに問題があります。私はすでにこれについてのボードの周りを検索しましたが、誰も私の特定の問題を抱えているようです。構造体を配列に格納する(C++)

私は動的な呪文の配列を必要とするテキストベースのRPGゲームを作成しています。 )

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

そして、メインに(、私はこれらの2つのインスタンスを格納しよう - :私は、構造体の2つのインスタンスを作成し、初期化

struct spell 
{ 
    std::string mSpellName; 
    int mRequiredMagicPoints; 
}; 

- :呪文はそうのように定義された構造体、あります

int main() 
{ 
    std::vector<spell> mSpells[2]; 

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

しかし、Xcodeのは私で叫ぶと、 " '=' オーバーロードされた生存可能な" 読まない

Iヘクタール - :ベクトル配列内また、これらの構造体を従来の動的配列に格納しようとしましたが、それでもコンパイルは行われません。私は間違って何をしていますか?

ありがとうございます!

+0

CはC++はCで間違ったタグを使用しないでくださいではないではありません。 – Olaf

+1

おそらく 'std :: vector mSpells(2);'を意味し、2要素のベクトルです。あなたが実際に書いたのは、2つの空のベクトルの配列です。 –

+0

['push_back'](http://www.cplusplus.com/reference/vector/vector/push_back/) –

答えて

5

std::vector<spell> mSpells[2];ベクトルの配列を定義します。あなたは2つの要素のベクトルだけを望んでいるようです。だから、あなたが開始するが、単にベクトルを定義する:

std::vector<spell> mSpells; 

次に、あなたがそれに要素を追加するためのseveral optionsを持っている:

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

あなたはspell秒の2つのvectorの配列を宣言しました。あなたは明らかに一つだけvectorをしたいので、あなたが次のことを言いたい:

vector<spell> mSpells(2); 

また、これは2つのデフォルト・構築の要素を持っているmSpellsを初期化します。

はまた書きたいと思うかもしれません:

vector<spell> mSpells; 
mSpells.reserve(2); // optional, good idea 
mSpells.push_back(fireBall); 
mSpells.push_back(magicMissile); 
関連する問題