我定义了以下类:
#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]”变量超出了范围,但是在这种情况下我找不到任何有效的解决方案。
答案 0 :(得分:0)
好的,通过将module_base mod;
更改为module_base* mod;
,将modCont.mod = modBase;
更改为modCont.mod = &modBase;
,并将点运算符更改为箭头运算符,可以使代码工作。
感谢Peter和HolyBlackCat的帮助。