在c++中调用一个方法来改变私有变量
calling a method to change a private variable in c++
我有3个职业,玩家,怪物和攻击。
Class Player
{
public:
void addMonster(string line);
// ...
}
Class Monster
{
public:
void addAttack();
// ...
private:
vector <Attack> _attacks;
}
现在,addMonster()创建了一个新的怪物mn,然后让mn调用它的方法addAttack()来填充向量_attacks
void Player::addMonster(string line){
//...
Monster mn(line); //creates a new monster
while(condition){
mn.addAttack();
}
}
void Monster::addAttack(){
//...
Attack *att = gio->findAttack(ID) //takes the attack from another part of the program
_attacks.push_back(*att);
}
,它似乎工作,如果我检查_attacks的内容,而在addAttack()内,它正在推动正确的元素,_attacks的大小变化和一切,但是当程序返回到addMonster()时,mn的_attacks向量仍然(或再次)为空,就好像它根本没有调用该方法一样。为什么?就好像被修改的对象只是调用该方法的对象的副本,所以原始对象不受影响,但接下来我该如何改变特定对象的向量呢?
当您在addAtack中创建*att指针时,您将它创建在堆栈上。堆栈变量在其原始函数结束时被删除,因此在add攻击结束时将删除att。一种可能的解决方法是在堆上创建att,使用关键字new.
相关文章:
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 为什么Qt QString的替换方法会改变QString?
- 当矢量改变容量时,有什么方法可以更新指针/参考值
- 继承的方法不会更改变量值
- 有什么方法可以改变同步Windows API SendARP的行为吗?
- 改变std :: bitset中一系列位值的最有效方法
- C++ eof 上的 istream tellg()/fail() :行为改变;解决方法
- 方法问题 - 什么会改变值,什么不会改变?什么是无效的?
- 如何在java中做什么在c++中是改变一个被覆盖的方法的可见性
- 是否有一种方法可以改变MFC SDI应用程序的标题字体?
- 如何用静态方法改变c++中对象的属性
- 静态方法中的对象创建是改变其他静态对象的私有成员变量
- 改变一种方法的保护级别是否被认为是一种良好的做法
- 'const'方法可以改变什么?
- 在2D矢量的预定位置改变几个值的最简单方法是什么?
- visual studio 2012 - c++中是否有改变常量值的方法?
- 是否有一种方法可以改变变量在内存中的存储方式(位大小)
- 静态方法中的静态变量不会改变
- 利用策略模式改变方法及其关联状态
- 在c++中调用一个方法来改变私有变量