Доступ к переменной через get-Method не работает вне класса - PullRequest
0 голосов
/ 24 октября 2018

Моя проблема в том, что если я напечатаю значение энергии поля в методе set конкретного поля, оно будет напечатано, но если я попытаюсь напечатать его сразу после выхода из метода set (строка кода2 или 3) оно всегда имеет значение ноль.

С помощью метода set void Field::_dEnergy(double dEnergy) Я хочу присвоить значение dEnergy из vvoField[][].

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

Мои методы get- / set-выглядят так:

void Field::_dEnergy(double dEnergy)       { this->dEnergy = dEnergy; std::cout << this->dEnergy; };
double Field::_dEnergy()                   { return this->dEnergy; };

(Для целей тестирования я установил все как public. И get, и set, и фактическая переменная dEnergy в Field.)

Я что-то не так делаю в скобках, чтобы указать поле, или в чем моя проблема?Если я печатаю энергию каждого поля, ни одно из них не будет отличаться от нуля, поэтому я думаю, что get всегда дает 0.

1 Ответ

0 голосов
/ 24 октября 2018

Проблема в вашей функции _vvoFields().

Вы возвращаете временную переменную (это копия) вместо внутренней переменной.

Для возвратавнутренняя переменная, измените объявление функции на:

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

Обратите внимание на & после типа возврата.

С этим изменением вы возвращаете ссылкук внутренней переменной, так что любая модификация к ней будет обновлять внутреннее значение (так как оба одинаковы).

Это отличается от исходного определения, где вы возвращаете копию внутреннего значения, это, совершенно другой экземпляр.

...