c++中的变量变更
variables alteration in c++
我遇到了一个荒谬的问题。
我在数组成员内部有一个类。我有一个get方法和一个set方法。
问题是,我调用set(to update)方法来更改数组中的变量,并且我通过调试器看到这些变量实际上是更新的。然后,当我在set方法之后立即调用get方法时,我发现数组的变量已经改回了原来的值
这是大致的代码:
object.updatFunction();//sort of set method
//nothing in between
Type variable=object.getFunction();
添加代码:
void Cube::updtCornersNextToCentr()
{
int iHalfSide=m_SideSize/2;
int centerX(m_Center.x()),centerY(m_Center.y()),centerZ(m_Center.z());
m_CubeCornerVertices[0].setX(centerX-iHalfSide);
m_CubeCornerVertices[0].setY(centerY+iHalfSide);
m_CubeCornerVertices[0].setZ(centerZ-iHalfSide);
m_CubeCornerVertices[1].setX(centerX+iHalfSide);
m_CubeCornerVertices[1].setY(centerY+iHalfSide);
m_CubeCornerVertices[1].setZ(centerZ-iHalfSide);
//.......
m_CubeCornerVertices[7].setX(centerX+iHalfSide);
m_CubeCornerVertices[7].setY(centerY-iHalfSide);
m_CubeCornerVertices[7].setZ(centerZ+iHalfSide);
}
QVector3D * Cube::getCubeCornerVertices()const
{
static QVector3D temp[8];
for(int i=0;i<8;i++)
{
temp[i]=m_CubeCornerVertices[i];
}
return &temp[0];
}
这个问题真的很荒谬,我不想让这篇文章模棱两可。这是一个非常初学者的错误,都是关于一个缺失的«&»导致我更新了一份副本。事实上,我在上面简化了写下一个代码:
object.updatFunction();//sort of set method
//nothing in between
Type variable=object.getFunction();
更真实的代码是这样的:
m_WorldSpace->getCube().updtCornersNextToCentr()
//nothing in between
const QVector3D corners[8]=m_WorldSpace->getCube().getCubeCornerVertices();
所有的问题都出现在getCube()函数中,它不是这样的:
Cube& WorldSpace::getCube()//here is the missing "&"
{
return m_Cube;
}
我写了这个
Cube WorldSpace::getCube()//this caused to get and update just a temporary copy
{
return m_Cube;
}
有人可以说我有多个级别的getter,这让我失明。非常感谢。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 将包含C样式数组的对象初始化为成员变量(C++)
- 当vector是tje全局变量时,c++中vector的内存管理
- 通过多个头文件使用常量变量
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 执行函数时导致崩溃的变量
- 变量没有改变?通过向量的函数调用