Переменная объектов становится нераспределенной при вызове из другого объекта - PullRequest
0 голосов
/ 20 марта 2019

У меня определены следующие классы:

#include <vector>

class module_base{
private:
    double m_position[2] = { 0,0 };
public:
    void position(double pos[2]) {
        m_position[0] = pos[0];
        m_position[1] = pos[1];
    }
    std::vector<double> position(){
        return {m_position[0],m_position[1]};
    }
};

class module_container{
private:
    double m_position[2] = { 0,0 };
public:
    module_base mod;
    void position(double pos[2]){
        m_position[0] = pos[0];
        m_position[1] = pos[1];
    }
    void setModPos(){
        double newPos[2] = {m_position[0] + 5, m_position[1] + 10};
        mod.position(newPos);
    }
    std::vector<double> position(){
        return {m_position[0],m_position[1]};
    }
};

Теперь, когда я запускаю код для создания объекта каждого и изменения значения внутренних объектов с помощью функции setModPos (), я не получаю никаких изменений в m_position.

Конкретный фрагмент кода, который я запускаю для этого:

module_container modCont;
module_base modBase;
modCont.mod = modBase;
std::cout << "Initial: " << modBase.position()[0] << ", " << modBase.position()[1] << std::endl;
modCont.setModPos();
std::cout << "Expected: " << modBase.position()[0] + 5 << ", " << modBase.position()[1] + 10 << std::endl;
std::cout << "Got: " << modBase.position()[0] << ", " << modBase.position()[1] << std::endl;

Когда я запускаю этот код, я получаю следующий вывод на консоль:

По умолчанию: 0, 0

Ожидаемое: 5, 10

Получено: 0, 0

Я пытался делать такие вещи, как создание сеттера для [0] и [1] без преобладания.Я относительно новичок в C ++ (как подсказывает мой код) и бью каменную стену.Я знаю, что проблема в том, что моя переменная 'newPos [2]' выходит из области видимости после выхода из функции (следовательно, освобождает память), но я не могу найти какие-либо решения, которые работают в этом случае.

1 Ответ

0 голосов
/ 20 марта 2019

Хорошо, мой код работает, изменив module_base mod; на module_base* mod;, modCont.mod = modBase; на modCont.mod = &modBase; и изменив операторы точек на операторы стрелок.

Спасибо за помощь, Питер и HolyBlackCat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...