2016-10-22 8 views
1

私はMagickというテキストベースのアドベンチャーゲームを作っています。このゲームで
私はそれがこのベクトル要素を印刷しようとすると 'operator <<'に一致しません

class damageSpell { 
    public: 
     int damage; 
     SubClasses type; 
     int manaCost; 
     std::string spellDescription; 
}; 

ように私はそう

std::vector<damageSpell> damageSpells

後でのようなベクトルの型として、このクラスを使用し、私が追加しようとしたに見えますdamageSpellラベルされたクラスを持っていますベクトル上にinsert関数を使用して、要素を私のdamageSpellsベクトルに挿入します。

damageSpell fireball; 

user.damageSpells.insert(user.damageSpells.begin(), 0, fireball); 

は、その後、私は、私はC++に新しいですし、これが意味や方法を何見当がつかないこのエラー

magick1.cpp:252:15: error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream}’ and ‘damageSpell’)

を受け、これを行う際に

std::cout << user.damageSpells[0];

を、それをプリントアウトしようとしました私はそれを修正するために行く必要があります、すべての助けが感謝されます。

+0

[Operator Overloading](http://stackoverflow.com/questions/4421706/operator-overloading)、特に「Bitshift Operators」に関する選択された回答のセクションが有益です。 – WhozCraig

+0

'<<"演算子を使った出力は自動的に起こるものではありません。代わりに、各標準タイプの出力を扱う '<<'演算子の特殊なオーバーロードがあります。出力演算子で独自の構造体を出力したい場合は、独自のカスタム 'operator <<'関数を記述する必要があります。ちょうどすべての[良い初心者の本](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)はあなたにそれを行う方法を教えてくれるでしょう。 –

+0

何かをベクターに入れて印刷できないと思いますか?たぶん、ベクトルを忘れて、 'damageSpell'オブジェクトを印刷してみてください。 – juanchopanza

答えて

3

すぎ std::cout<<user.damageSpells[0].damage<<user.damageSpells[0].manaCost

、これを試してみてように...... とサブクラスのためには、あなたのクラスspellDamageのインスタンスです。コンパイラにはどのように印刷するのか分かりません。 <<オペレータで呼び出される関数を定義し、それを印刷する必要があります。

この演算子のオーバーロードは次のように定義することができます

std::ostream& operator<<(std::ostream& stream, const damageSpell& damageSpellToPrint) 
{ 
    // Your code here 
} 

それはあなたが<<std::ostream(のようなstd::cout)間の演算子とあなたのクラスのインスタンスを使用しeachtime呼び出されます。私はあなたがCでオペレータのオーバーロード概念を理解するのに役立ちますthis postまたはthis documentation ++お勧め

std::cout << user.damageSpells[0]; 

:たとえば、次のコードは、直接streamパラメータとuser.damageSpells[0]damageSpellToPrintなどのパラメータとしてstd::coutを渡し、あなたのオペレータ関数を呼び出します。

+0

さて、私はこれを取得し始めている、私は自分のクラスを作成したので、私は自分の演算子を作成する必要がありますが、一度作られたことを理解...私はそれにアクセスする方法は?新しい演算子を使用するためにdoneを使用すると、どのコードを使用するのですか? –

+0

@Alice演算子は、 'std :: ostream'とクラスのインスタンスの間で' << 'を使うたびに呼び出されます。 – Aracthor

+0

さて、それを得る。だから、上記の関数の中にはどんなコードが入りますか?むしろ、どのようなコードか。 –

0

あなたがしていることはオブジェクト全体を印刷していますが、< <演算子はオブジェクトを印刷するために定義されておらず、自分で行う必要があります。 user.damageSpells[0]

関連する問題