分配向量值
Assigning Vector Values
我正在开发一个简单的骰子游戏项目,该项目需要我实例化多个自定义副本 class。
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;
}
玩家Class:
//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 行的影响。因此,当我对 PL 1,2 和 3 使用 cout 时,它总是打印
玩家1,玩家1,玩家1
然后
玩家 2,玩家 2,玩家 2
等等
为什么对每个索引的引用对于它们自己的对象不是唯一的?
原因很简单。您已经在全局命名空间中定义了 string playerName;
(您没有给出源文件的完整结构),因此,无论何时调用 Player::setname
,您都会修改此全局变量,因此,当您调用Player::printName()
在你的 for 循环中,你只是读取了这个在 Player
的所有实例之间共享的变量。要解决此问题,请将此变量移至 Player
class:
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
};
我正在开发一个简单的骰子游戏项目,该项目需要我实例化多个自定义副本 class。
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;
}
玩家Class:
//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 行的影响。因此,当我对 PL 1,2 和 3 使用 cout 时,它总是打印
玩家1,玩家1,玩家1 然后 玩家 2,玩家 2,玩家 2 等等
为什么对每个索引的引用对于它们自己的对象不是唯一的?
原因很简单。您已经在全局命名空间中定义了 string playerName;
(您没有给出源文件的完整结构),因此,无论何时调用 Player::setname
,您都会修改此全局变量,因此,当您调用Player::printName()
在你的 for 循环中,你只是读取了这个在 Player
的所有实例之间共享的变量。要解决此问题,请将此变量移至 Player
class:
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
};