У меня определены следующие классы:
#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]' выходит из области видимости после выхода из функции (следовательно, освобождает память), но я не могу найти какие-либо решения, которые работают в этом случае.