我有一个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,因此我不确定为什么它们将恢复为原始值。为什么会发生这种情况的任何想法?
答案 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,因此得到的变化是零?
需要看到更多的代码来做更多的事情,而不是在黑暗中刺伤。