【问题标题】:Assigning Vector Values分配向量值
【发布时间】:2018-10-21 21:43:30
【问题描述】:

我正在开发一个简单的骰子游戏项目,该项目需要我实例化一个自定义类的多个副本。

vector <Player> playerList;

playerList.resize(totalNumPlayers); //totalNum is grabbed from cin

for (int x = 0; x < totalNumPlayers; x++) 
{
    playerList.at(x).setname("Player" + to_string(x + 1));
    //playerList[x] = p;
    playerList.at(x).printName();
    cout << playerList[0].returnName() << " " << playerList[1].returnName() << " " << playerList[2].returnName() << endl;
}

玩家等级:

//Declarations
string playerName;
int playerChips;

Player::Player()
{
    //Default constructor for when player is created
    playerChips = 3;
    playerName = "DEFAULT_PLAYER_NAME";
}

void Player::setname(string var)
{
    playerName = var;
}

string Player::returnName()
{
    return(playerName);
}

void Player::printName()
{
    cout << playerName << endl;
}

void Player::addChips(int x)
{
    playerChips += x;
}

void Player::removeChips(int x)
{
    playerChips -= x;
}

int Player::returnChips()
{
    return(playerChips);
}

我注意到,在原始 forloop 的每次迭代中,playerList[x] 的值始终相同。例如,如果 totalNumPlayers = 3,则 playerList[0]、playerList[1] 和 playerList[2] 都受 setName 行的影响。因此,当我将 cout 用于 PL 1、2 和 3 时,它总是会打印

播放器1,播放器1,播放器1 然后 播放器2,播放器2,播放器2 等等。

为什么对每个索引的引用对它们自己的对象不是唯一的?

【问题讨论】:

    标签: c++ vector assign


    【解决方案1】:

    原因很简单。您已经在全局命名空间中定义了string playerName;(您还没有给出源文件的完整结构),因此,无论何时调用Player::setname,您都会修改此全局变量,结果,当您在其中调用Player::printName()您的 for 循环,您只需读取在 Player 的所有实例之间共享的这个变量。要解决此问题,请将此变量移到 Player 类中:

    class Player
    {
    private: 
        string playerName;
    public:
        Player();
        void setname(string var);
        string returnName();
        string Player::returnName();
        void printName();
        void addChips(int x);
        void printName();
        // and the rest of your declarations
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多