C ++,变量恢复为初始值

时间:2011-07-19 17:15:34

标签: c++

我有一个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,因此我不确定为什么它们将恢复为原始值。为什么会发生这种情况的任何想法?

3 个答案:

答案 0 :(得分:9)

我的通灵调试技巧表明了一些可能性:

  • 您在分配成员float dX = small_float_value;而不是dX = small_float_value;时隐藏了成员
  • 您正在处理shapeObject的不同副本,并且修改后的副本会被意外丢弃(或者其复制构造函数不会显而易见)。
  • 只有的值在打印时仍为零,但实际上是您想要的小浮点值。
  • 不知何故,小浮点值被截断为零。

答案 1 :(得分:0)

当加上或减去一个小值时,尝试使用浮点数,如dx = dx +(float)0.001; 最好尝试使用double而不是float.Float有一些精度问题。

答案 2 :(得分:0)

也许在某个地方,小浮点值在被加/减之前被转换为int,因此得到的变化是零?

需要看到更多的代码来做更多的事情,而不是在黑暗中刺伤。