将操作推送到向量后,对象的成员变量值发生了变化
Object has members variables values changed after push operation to vector
我有一个 std::vector<Item*> listOfItems
,其中包含指向 Item
个对象的指针。
我有两个参数用于 Item
的构造函数,
Item::Item(std::string name, int amount)
{
itemName = name;
ownerAmount = amount;
}
我还有Player
个对象,它有一个成员变量std::vector<Item> ownedItems
。
我在主文件中创建了一个向量,其中包含指向各种 Player
所拥有的所有 Item
对象的指针,声明如下:
std::vector<Item*> itemList = listOfItems(players);
哪里
std::vector<Item*> listOfItems(std::vector<Player*> players) {
std::vector<Item*> listOfItems itemList;
for (int i = 0; i < players.size(); i++) {
for (int j = 0; j < players.at(i)->getAllCountries()->size(); j++) {
itemList.push_back(&players.at(i)->getAllCountries()->at(j));
}
}
return itemList;
}
声明后,我运行我的玩家的策略是:
player1->executeStrategy(&itemList);
现在在我的播放器的 doOperation(遵循策略模式)中声明如下:
void HumanPlayerStrategy::doOperation(Item* x, std::vector<Item*> *itemList){
attackerVictory(x, itemList);
}
我是 运行 函数 attackerVictory
,它有一个指向在 main 中声明的 itemList
的指针,所有指针都指向不同 Item
拥有的 Player
(为了修改这些)。
唯一的问题是,在我完成 attackerVictory 中的操作后,添加到 itemList
的任何 Item
都具有空白成员变量值。
我似乎不明白为什么这行不通?
这是我的 attackerVictory 函数:
void Strategy::attackerVictory(Item* x, std::vector<Item*> *listOfItems) {
Item temp = *x;
/* set different member variable values for the Item temp */
listOfItems->push_back(&temp);
}
如果 listOfItems
具有空的 itemName
和 ownerAmount
值,那么这样做最后会给我 Item
。我在这里错过了什么?
您正在添加对一个临时对象的引用,该对象在执行 attackerVictory 方法后被销毁。应该是
void Strategy::attackerVictory(Item* x, std::vector<Item*> *listOfItems){
Item * tempptr = new Item();
*tempptr = *x;
listOfItems->push_back(tempptr);
}
我有一个 std::vector<Item*> listOfItems
,其中包含指向 Item
个对象的指针。
我有两个参数用于 Item
的构造函数,
Item::Item(std::string name, int amount)
{
itemName = name;
ownerAmount = amount;
}
我还有Player
个对象,它有一个成员变量std::vector<Item> ownedItems
。
我在主文件中创建了一个向量,其中包含指向各种 Player
所拥有的所有 Item
对象的指针,声明如下:
std::vector<Item*> itemList = listOfItems(players);
哪里
std::vector<Item*> listOfItems(std::vector<Player*> players) {
std::vector<Item*> listOfItems itemList;
for (int i = 0; i < players.size(); i++) {
for (int j = 0; j < players.at(i)->getAllCountries()->size(); j++) {
itemList.push_back(&players.at(i)->getAllCountries()->at(j));
}
}
return itemList;
}
声明后,我运行我的玩家的策略是:
player1->executeStrategy(&itemList);
现在在我的播放器的 doOperation(遵循策略模式)中声明如下:
void HumanPlayerStrategy::doOperation(Item* x, std::vector<Item*> *itemList){
attackerVictory(x, itemList);
}
我是 运行 函数 attackerVictory
,它有一个指向在 main 中声明的 itemList
的指针,所有指针都指向不同 Item
拥有的 Player
(为了修改这些)。
唯一的问题是,在我完成 attackerVictory 中的操作后,添加到 itemList
的任何 Item
都具有空白成员变量值。
我似乎不明白为什么这行不通?
这是我的 attackerVictory 函数:
void Strategy::attackerVictory(Item* x, std::vector<Item*> *listOfItems) {
Item temp = *x;
/* set different member variable values for the Item temp */
listOfItems->push_back(&temp);
}
如果 listOfItems
具有空的 itemName
和 ownerAmount
值,那么这样做最后会给我 Item
。我在这里错过了什么?
您正在添加对一个临时对象的引用,该对象在执行 attackerVictory 方法后被销毁。应该是
void Strategy::attackerVictory(Item* x, std::vector<Item*> *listOfItems){
Item * tempptr = new Item();
*tempptr = *x;
listOfItems->push_back(tempptr);
}