从另一个对象调用时,对象的变量变得未分配

时间:2019-03-19 22:18:16

标签: c++ class object nested

我定义了以下类:

#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 :(得分:0)

好的,通过将module_base mod;更改为module_base* mod;,将modCont.mod = modBase;更改为modCont.mod = &modBase;,并将点运算符更改为箭头运算符,可以使代码工作。

感谢Peter和HolyBlackCat的帮助。