【问题标题】:Access variable via get-Method not working outside class通过 get-Method 访问变量在课堂外不起作用
【发布时间】:2018-10-24 10:36:57
【问题描述】:

我的问题是,如果我在特定字段的设置方法中打印字段的能量值,它将被打印,但是如果我在退出设置方法后立即尝试打印它(代码行2 或 3) 它的值始终为零。

使用 set-method void Field::_dEnergy(double dEnergy),我想为 dEnergyvvoField[][] 赋值。

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 以及 Field 中的实际变量 dEnergy。)

我在括号中指定字段时有什么问题吗?或者我的问题是什么?如果我打印每个场的能量,没有一个设置不同于零,所以我猜 get 总是给出 0。

【问题讨论】:

标签: c++ class get set


【解决方案1】:

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

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

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

std::vector&lt;std::vector&lt;Field&gt; &gt;&amp; _vvoFields()

注意返回类型后面的&amp;

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

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

【讨论】:

    猜你喜欢
    • 2013-08-03
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 2021-04-09
    • 2012-08-08
    • 1970-01-01
    相关资源
    最近更新 更多