2017-08-08 11 views
0

タイプが私のオーバーロードコンストラクターであるか、正確にはモンスターのベクトルを作りたいと思っていますが、私はそれを渡すと思われます。私は何を間違えたのですか?C++モンスターのベクトル

// Monster.cpp 

#include <iostream> 
#include <string> 
#include "Monster.h" 
#include "Player.h" 
#include "Random.h" 
#include "Weapon.h" 
using namespace std; 

Monster::Monster(const std::string& name, int hp, int acc, 
    int xpReward, int armor, const std::string& weaponName, 
    int lowDamage, int highDamage, int monstergold) 
{ 
    mName = name; 
    mHitPoints = hp; 
    mAccuracy = acc; 
    mExpReward = xpReward; 
    mArmor = armor; 
    mWeapon.mName = weaponName; 
    mWeapon.mDamageRange.mLow = lowDamage; 
    mWeapon.mDamageRange.mHigh = highDamage; 
    mGold = monstergold; 
} 

これは、ロールが20よりも高かった場合、それはエラーにモンスター

else if (roll > 20) 
{ 
    vector <Monster(const std::string& name, int hp, int acc,int xpReward, int armor, const std::string& weaponName, int lowDamage, int highDamage, int monstergold)> MonsterArray; 
    MonsterArray.push_back("Orc Lord", 25, 15, 2000, 5,"Two Handed Sword", 5, 20, 100); 


    cout << "You encountered an multiple monsters!!!" << endl; 
    cout << "Prepare for battle!" << endl; 
    cout << endl; 
} 

のグループをして遭遇する必要があり、それはありませんオーバーロードされた関数と言う、マップであり、 。私はこれが間違っていることを知っているが、私は本当にそれをやる方法が全くわからない。何かアドバイス?

+0

をhttp://stackoverflow.com/questions/388242/the-definitive-c-book-guide- and-list)を使用して、テンプレートクラスの使用方法を学習します。 –

+1

[std :: vector :: emplace_back'](http://en.cppreference.com/w/cpp/container/vector/emplace_back)関数についても学ぶべきでしょう。そして一般的に['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)の詳細を読んでください。 –

答えて

4

あなたはテンプレートではなく、コンストラクタに呼び出そうと型名を指定する必要があります。

// Here you define that vector will contain instances of Monster class 
vector<Monster> MonsterArray; 

// Add new monster by explicitly calling 
// to the constructor and pushing into container 
MonsterArray.push_back(Monster("Orc Lord", 25, 15, 2000, 5,"Two Handed Sword", 5, 20, 100)); 

私はThe C++ Programming Language本を読むことをお勧めしたいものの。


また、あなたが例えば、ベクトルコンテナの含ま不足しているようだ。:

#include <vector> 
+0

の神私のああ、それは動作しますが、簡単だったwelpが、私は疑問を持っている、「<>」「モンスター()」に比べて、ベクターの、私が知っている内部の「モンスター」の間diffrenceは何である「モンスター() "はコンストラクタですが、その違いと用途は何かを知りたいと思います。例私はクラス "Player"を持っていますし、コンストラクタ "Player()"もあります。クラスの外にPlayer型を宣言しました。Player mainPlayer、これはオブジェクトですか?この場合、ベクトルに "()"を追加しないので、オブジェクトのグループを宣言していますか? –

+0

この本を読むことを強くお勧めします。テンプレートを使用している場合は、<>中かっこでは通常(テンプレートに依存します)、テンプレート名に置き換えるためにtypenameを定義します。さて、PlayerのmainPlayerを定義します。それは暗黙的にデフォルトのコンストラクタを呼び出します。しかし、正確には、私がコメントに取り込める以上に多くのものがあり、本を置き換えることはできません。 –

+1

デフォルトコンストラクタを持つクラスがあり、その型の変数を宣言すると、ほとんどの場合、スタックまたはヒープに変数またはオブジェクトがあります。でも、あなたのようなコードを参照する場合: 'プレーヤープレイヤーを、デフォルト、それは'呼び出しているプレーヤープレイヤー()で​​ ';'あなたは、このような基本的なコンテナ 'のstd ::ベクトルとしてテンプレートパラメータ内のクラスの型名を参照してください今とき'や 'STD: :ベクトルそれらへ 'あるいはポインタ:'のstd ::ベクトル 'や'のstd ::ベクトル 'これらは、クラスのインスタンスではありません、これらは型への型名やポインタです。 –

0

あなたのベクトルを宣言しながら、あなたのモンスタークラスのすべてのパラメータを指定する必要はありません。 は、単にそのような何か:([良い初心者の書籍のカップルを読む]私はあなたがする必要があると思う

std::vector<Monster> monsters; 
monsters.push_back(new Monster("Orc Lord", 25, 15, 2000, 5,"Two Handed Sword", 5, 20, 100));