c++ - 通过 get-Method 访问变量在课堂外不起作用
问题描述
我的问题是,如果我在特定字段的 set-method 中打印字段的 Energy 值,它将被打印,但是如果我在退出 set-method 后立即尝试打印它(代码行 2 或 3 ) 它的值始终为零。
使用 set-methodvoid Field::_dEnergy(double dEnergy)
我想为dEnergy
of分配一个值vvoField[][]
。
this->_vvoField()[uiY][uiX]._dEnergy(dCurrentEnergy);
std::cout << this->_vvoField()[uiY][uiX].dEnergy;
std::cout << "Energy: " << this->_vvoField()[uiY][uiX]._dEnergy();
我的 get-/set-methods 如下所示:
void Field::_dEnergy(double dEnergy) { this->dEnergy = dEnergy; std::cout << this->dEnergy; };
double Field::_dEnergy() { return this->dEnergy; };
(出于测试目的,我已将所有内容设置为公开。get 和 set 以及 . 中的实际变量dEnergy
。Field
)
我用括号指定字段有什么问题吗?或者我的问题是什么?如果我打印每个场的能量,没有一个设置不同于零,所以我猜 get 总是给出 0。
解决方案
问题出在你的_vvoFields()
功能上。
您正在返回一个临时变量(这是一个副本),而不是内部变量。
为了返回内部变量,修改函数声明为:
std::vector<std::vector<Field> >& _vvoFields()
注意&
返回类型之后。
通过此更改,您将返回对内部变量的引用,因此对其进行任何修改都会更新内部值(因为两者相同)。
这与原始定义不同,在原始定义中,您返回内部值的副本,这是一个完全不同的实例。