我慢してください、私はC ++に比較的慣れていません。
これが私のプロジェクトです。私は基本的にチェスの簡単なゲームを作りたいと思っています。
私は最終的に抽象クラスになると考えている基本クラスのgamePieceを持っています(しかし、今はそうではありません)
基本クラスの gamePiece には、colorOfPiece、rankOfPiece、fileOfPiece などのデータ メンバーが多数あります。また、関数 void displayPieceInfo() もあり、cout を介してコンソールにこれらすべての値を単純に表示します。
このクラスからいくつかの派生クラスを作成する予定です。現在、「ルーク」サブクラスがあります。
1 つのベクターにさまざまなタイプのピースを追加したいので、後でイテレーターでトラバースできます。
これが私が遭遇している問題です。
vector<gamePiece> vectorOfAllGamePieces;
vector<gamePiece>::iterator itGamePieces;
Rook を最初の要素としてベクターに push_back します。すべてのコンストラクターは正常に動作しているように見え、変数を初期化しています。しかし、最初の要素で表示機能を実行しようとすると、文字列が空/初期化されます。
itGamePieces=vectorOfAllGamePieces.begin();
itGamePieces->displayPieceInfo();
代わりに汎用の gamePiece をベクターにプッシュすると、すべてが適切に表示されます。
このようなベクトルを混合タイプのオブジェクトで使用することさえ許されますか? たとえば、派生クラスのオブジェクト、親クラスのオブジェクト、同じ親から派生した 2 番目のクラスのオブジェクトなどです。
もしそうなら、コンストラクターでデータ メンバーを設定した後でも、データ メンバーの値が正しく表示されないのはなぜだと思いますか?