関数内でオブジェクトメンバー変数が更新されていますが、永続化されていません

MattE93

私はc ++にかなり慣れておらず、単純な戦艦ゲームを構築しています。船のオブジェクトのベクトルを取り込んで、船の種類と長さを初期化する関数があります。関数内でタイプと船長が更新されていることを確認しましたが、メイン関数では変更が保持されていません。どんな助けでも大歓迎です。

#include <iostream>
#include <vector>
#include "ships.h"
#include "board.h"
#include "player.h"


using std::vector; 

void initialize_ships(vector<ship> &newFleet)
{
    vector<string> ship_types = { "carrier","battleship","submarine","cruiser","destroyer" };

    for (auto ii = 0; ii != newFleet.size(); ++ii)
    {
        newFleet[ii].type = ship_types[ii];
        newFleet[ii].setLength();
        if (newFleet[ii].type == "carrier")
        {
            std::cout << "Carrier in function has type: " << newFleet[ii].type << std::endl;
        }

    }
}

int main()
{


ship player_carrier, player_battleship, player_submarine, player_cruiser, player_destroyer;
vector<ship> player_fleet = {player_carrier, player_battleship, player_submarine, player_cruiser, player_destroyer };


initialize_ships(player_fleet);
std::cout << "Carrier in main has type: " << player_carrier.type << std::endl;



system("pause");
return 0; 

}

#ifndef  SHIPS_H
#define SHIPS_H

#include <iostream>
#include <string>


using std::string;

struct ship
{
    // ships member variables 
    int len;
    char dir; 
    int health; 
    int row;
    int col;
    char symb;
    string type; 

    void setLength()
    {
        if (type == "carrier")
        {
            len = 5;
        }
        else if (type == "battleship")
        {
            len = 4;
        }
        else if (type == "cruiser")
        {
            len = 3;
        }
        else if (type == "submarine")
        {
            len = 3;
        }
        else if (type == "destroyer")
        {
            len = 2;
        }
        else
        {
            std::cout << "Invalid ship type!" << std::endl;
        }
    }
};

#endif //  SHIPS_H
デイビスヘリング

誤ってコピーを作成することは、変更が「失われる」一般的な理由です。コンテナ内にオブジェクト持ち、それらのオブジェクトの名前を(クラスのメンバーであるかのように)持つ必要があるこの特定の状況では、コンテナ内のオブジェクトへの参照作成するのが賢明です

vector<ship> player_fleet(5);
ship &player_carrier=player_fleet[0],
  &player_battleship=player_fleet[1],
  &player_submarine=player_fleet[2],
  &player_cruiser=player_fleet[3],
  &player_destroyer=player_fleet[4];

vectorを再割り当てさせないように注意してください。再割り当てすると、参照が無効になります。(もちろん、サイズが変わらない場合ship player_fleet[5];は十分です。)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

そのクラスのオブジェクトが作成されたときにコンストラクターがメモリを取得する外部で関数がクリアされていますか。関数が呼び出されていません

分類Dev

[関連するソース行がありません]で永続オブジェクト参照がエラーに設定されていません

分類Dev

値が関数で宣言されている変数(オブジェクト)ではインターフェイスが機能しません(戻り値)-TypeScript

分類Dev

Javascript変数が関数内で更新されていません

分類Dev

オブジェクトは、そのメンバー関数を呼び出す前に初期化されることが保証されていますか?

分類Dev

JavaScript オブジェクト変数が変更されていません

分類Dev

プライベート変数が割り当てられ、断続的に例外エラーが表示されます-「オブジェクト参照がオブジェクトのインスタンスに設定されていません。」

分類Dev

グローバルオブジェクト内の組み込み型のメンバー変数はゼロで初期化されていますか?

分類Dev

mongodbのSpringDataJavaの保存時にオブジェクトが永続化されていません

分類Dev

Droolsアクションオブジェクトのメンバー変数が設定されていません

分類Dev

VBA:ループ内のオブジェクトが「Nothing」になり、「オブジェクト変数またはブロック変数が設定されていません」というエラーが表示されます

分類Dev

Excelvbaランタイムエラー91オブジェクト変数が設定されていません

分類Dev

vbaでオブジェクト変数が設定されていません(エラー91)

分類Dev

ランタイムエラー91:オブジェクト変数またはブロック変数がExcel2013で設定されていません

分類Dev

オブジェクト変数またはWithブロック変数が設定されていません

分類Dev

関数で作成されたオブジェクトをメンバー変数に割り当てます

分類Dev

JPA、すでに永続化されたオブジェクトは、「カスケードPERSISTとマークされていない関係を通じて新しいオブジェクトが見つかりました」と表示します。

分類Dev

オブジェクトが初期化されていません

分類Dev

クラスオブジェクトの配列要素が正しく設定されていません。set()およびget()メンバー関数が原因である可能性があります

分類Dev

VBAGetElementsByIdメソッド「オブジェクト変数が設定されていません」

分類Dev

VBAオブジェクト変数が設定されていません-HTMLスクレイピング

分類Dev

Dropwizard / Hibernate:双方向の1対多の関係でオブジェクトを永続化すると、「NULLは列に許可されていません」というエラーが発生します

分類Dev

関数内で変数値が渡されていません

分類Dev

関数内で変数が定義されていません

分類Dev

私のExcel「ランタイムエラー91:オブジェクト変数またはブロック変数が設定されていません」

分類Dev

getDataArray()および「オブジェクト変数が設定されていません」エラー

分類Dev

オブジェクト変数が設定されていませんエラー

分類Dev

VBAエラー91:オブジェクト変数が設定されていません

分類Dev

C ++メンバー変数が初期化されていません

Related 関連記事

  1. 1

    そのクラスのオブジェクトが作成されたときにコンストラクターがメモリを取得する外部で関数がクリアされていますか。関数が呼び出されていません

  2. 2

    [関連するソース行がありません]で永続オブジェクト参照がエラーに設定されていません

  3. 3

    値が関数で宣言されている変数(オブジェクト)ではインターフェイスが機能しません(戻り値)-TypeScript

  4. 4

    Javascript変数が関数内で更新されていません

  5. 5

    オブジェクトは、そのメンバー関数を呼び出す前に初期化されることが保証されていますか?

  6. 6

    JavaScript オブジェクト変数が変更されていません

  7. 7

    プライベート変数が割り当てられ、断続的に例外エラーが表示されます-「オブジェクト参照がオブジェクトのインスタンスに設定されていません。」

  8. 8

    グローバルオブジェクト内の組み込み型のメンバー変数はゼロで初期化されていますか?

  9. 9

    mongodbのSpringDataJavaの保存時にオブジェクトが永続化されていません

  10. 10

    Droolsアクションオブジェクトのメンバー変数が設定されていません

  11. 11

    VBA:ループ内のオブジェクトが「Nothing」になり、「オブジェクト変数またはブロック変数が設定されていません」というエラーが表示されます

  12. 12

    Excelvbaランタイムエラー91オブジェクト変数が設定されていません

  13. 13

    vbaでオブジェクト変数が設定されていません(エラー91)

  14. 14

    ランタイムエラー91:オブジェクト変数またはブロック変数がExcel2013で設定されていません

  15. 15

    オブジェクト変数またはWithブロック変数が設定されていません

  16. 16

    関数で作成されたオブジェクトをメンバー変数に割り当てます

  17. 17

    JPA、すでに永続化されたオブジェクトは、「カスケードPERSISTとマークされていない関係を通じて新しいオブジェクトが見つかりました」と表示します。

  18. 18

    オブジェクトが初期化されていません

  19. 19

    クラスオブジェクトの配列要素が正しく設定されていません。set()およびget()メンバー関数が原因である可能性があります

  20. 20

    VBAGetElementsByIdメソッド「オブジェクト変数が設定されていません」

  21. 21

    VBAオブジェクト変数が設定されていません-HTMLスクレイピング

  22. 22

    Dropwizard / Hibernate:双方向の1対多の関係でオブジェクトを永続化すると、「NULLは列に許可されていません」というエラーが発生します

  23. 23

    関数内で変数値が渡されていません

  24. 24

    関数内で変数が定義されていません

  25. 25

    私のExcel「ランタイムエラー91:オブジェクト変数またはブロック変数が設定されていません」

  26. 26

    getDataArray()および「オブジェクト変数が設定されていません」エラー

  27. 27

    オブジェクト変数が設定されていませんエラー

  28. 28

    VBAエラー91:オブジェクト変数が設定されていません

  29. 29

    C ++メンバー変数が初期化されていません

ホットタグ

アーカイブ