变量恢复到初始值

C++, Variables reverting to initial values

本文关键字:恢复 变量      更新时间:2023-10-16

我有一个c++类,shapeObject,这有点复杂,但这个问题只涉及类的两个特定字段,dX和dY。

header:
    class shapeObject{
        public:
            shapeObject();
                    ...
        private:
            float dX, dY;
                    ... 
    };
cpp file:
    shapeObject::shapeObject(){
            ...
            dX = 0;
            dY = 0;
            ...
    }

这些字段只被一个函数修改,该函数为dX或dY添加或减去一个小的浮点值,但是,下一次读取dX或dY的值时,它们已经恢复到原始值0.0。

由于字段没有被修改,但一个函数,该函数永远不会设置值为0.0,我不知道为什么他们恢复到原来的值。知道为什么会这样吗?

我的通灵能力显示了一些可能性:

  • 当你给成员分配float dX = small_float_value;而不是dX = small_float_value;时,你是在跟踪他们
  • 您正在使用shapeObject的不同副本,并且修改的副本被意外丢弃(或其复制构造函数不做明显的事情)。
  • 只有的值在打印中看起来仍然为零,但实际上是您想要的小浮动值。
  • 小浮动值被截断为零。

当添加或减去一个小值时,尝试使用float强制转换,如dx=dx+(float)0.001;最好尝试使用double而不是float。Float有一些精度问题

也许在某个地方,小的float值在被加/减之前被转换为int,所以结果的变化是零?

需要看更多的代码,而不是在黑暗中摸索。