通过get-Method访问变量在类外无法使用

时间:2018-10-24 10:36:58

标签: c++ class get set

我的问题是,如果我在特定字段的设置方法内打印字段的Energy值,则会打印该字段,但是如果我退出设置方法后立即打印它(代码行) 2或3),它的值始终为零。

使用设置方法void Field::_dEnergy(double dEnergy),我想为dEnergy的{​​{1}}分配一个值。

vvoField[][]

我的获取/设置方法如下:

this->_vvoField()[uiY][uiX]._dEnergy(dCurrentEnergy);
std::cout << this->_vvoField()[uiY][uiX].dEnergy;
std::cout << "Energy: " << this->_vvoField()[uiY][uiX]._dEnergy();

(出于测试目的,我将所有内容都设置为公共。在void Field::_dEnergy(double dEnergy) { this->dEnergy = dEnergy; std::cout << this->dEnergy; }; double Field::_dEnergy() { return this->dEnergy; }; 中同时获取和设置以及实际变量dEnergy。)

我在使用括号指定字段时是否出错,或者我在这里遇到什么问题?如果我打印每个字段的能量,则没有一个设置为零,因此我猜get总是为0。

1 个答案:

答案 0 :(得分:1)

问题出在您的_vvoFields()函数中。

您将返回一个临时变量(即副本),而不是内部变量。

为了返回内部变量,请将函数声明修改为:

std::vector<std::vector<Field> >& _vvoFields()

请注意返回类型后的&

进行此更改后,您将返回对内部变量的引用,因此对其进行任何修改都会更新内部值(因为两者相同)。

这与原始定义不同,在原始定义中,您返回内部值的副本,这是一个完全不同的实例。