0

SO に投稿するのはこれが初めてですが、ここでしばらくの間、回答とヘルプを利用してきました。

数年前から計画を立てたり止めたりしてきた単純なカード ゲームに取り組んでいます。最終的には、学校のシニア プロジェクトになる予定です (誰にも宿題を頼まないでください!)。

いくつかのクラスを介してリストの内容をコンソールにピントしようとすると、現在問題が発生しています。

for(std::list<Card>::iterator it = Hand.begin(); it != Hand.end(); it++)
    std::cout<< *it.GetName();

ラインかどうかを調べようとしています

std::cout<< *it.GetName();

有効かどうかです。仕事からトラブルシューティングを行っていますが、現在何も試すことができません。今朝プロジェクトを中止しなければならない前に、いくつかのコンパイル エラーが発生したため、<< 演算子をオーバーロードする必要があると思い込んでいたのですが、それを試みたところ、何らかの理由でいくつかのリンク エラーが発生しました。

私は一日のほとんどを調査してきましたが、正しい解決策として私に飛びついた状況に遭遇していませんが、この小さなブロックは、私がしようとしていることに対して最も正しいと思われるものです行う。

そのブロックは、ハンド リストに保存されているカード オブジェクトの名前をそのまま出力しますか? はい、Card クラスには GetName() 関数があり、正しく宣言されています。

4

1 に答える 1

3
*it.getName();

と同じです

*(it.getName());

since.と関数呼び出しは unary よりも優先され*ます。そのため、コンパイラはgetNameclass のメンバーを探しますstd::list<Card>::iteratorが、存在しません:getNameは (私が推測する) のメンバーでありCard、イテレータにはオブジェクトへの継承または転送関係がありません。

あなたはおそらく意味した

(*it).getName();

または同等に、

it->getName();

(矢印->演算子は、逆参照してからメンバーに名前を付けるための単なるショートカットです。)

于 2013-11-21T23:28:02.230 に答える