-2

いくつかの操作を実行する Player クラスを定義したので、いくつかの基本的な演算子をオーバーロードすると便利です。具体的には、Player オブジェクト間の比較に < を使用したいと考えています。そのため、クラスには次のものがあります。

bool operator<(const Player& rhs) const {return (*this < rhs );} 

残念ながら、これは問題を引き起こしました。後で、メイン関数で特定の要素を含むベクトルを出力しようとすると、コンパイラは << オペランドに一致するものがないことを知らせ、std::ostream << Player が必要です。以下は、問題の原因となっている行です。

vector<Player> playerVec(6);

for (int i = 0; i < 6; i++) {

cout << playerVec[i];

}

実際には、Player オブジェクトをストリームに直接出力したくないので、<< をオーバーロードする必要はないと思います。

コンパイラが < の特定の定義を取得し、より一般的なケースを探す必要がないという点で、何が起こっているのかについてある程度の考えがあります。私の質問は、<< 演算子をオーバーロードして一般的な機能を返す必要があるか、それとももっと簡単な解決策があるかということです。

助けてくれてありがとう!

4

2 に答える 2

7

私はあなたが2つの別々の問題を扱っていると推測しています:

1) がありません。これは、オブジェクトをストリーミングして他の出力ストリームstd::ostream& operator<<(std::ostream&, const Player&)にするために必要なものです。Playerstd::cout

2) 指定した演算子がそれ自体を呼び出すため、Playerより小さい比較演算子に無限再帰があります。<

于 2013-05-31T22:05:50.853 に答える
1

私は、あなたoperator<()が干渉しているとは思わない。コードの複雑さに応じて、コメントアウトするだけでこれを確認し、同じエラーが発生するかどうかを確認できます。

std::ostream & operator<<(std::ostream & os, const Player & p)非メンバー関数を指定する必要があります。そうしないと、コンパイラは次のような書き込みを行う方法を知りませんos << myPlayer

于 2013-05-31T22:06:14.717 に答える