2011-07-19 108 views
0

我有一個C++類shapeObject,雖然有點複雜,但這個問題只涉及類dX和dY的兩個特定字段。C++,變量恢復到初始值

header: 
    class shapeObject{ 
     public: 
      shapeObject(); 
        ... 

     private: 
      float dX, dY; 
        ... 
    }; 

cpp file: 
    shapeObject::shapeObject(){ 
      ... 
      dX = 0; 
      dY = 0; 
      ... 
    } 

這些字段僅通過一個函數,它會加上或減去一個小的float值DX或DY修改。但是,下一次讀取dX或dY的值時,它們已恢復爲其原始值0.0。

由於字段沒有在任何地方被修改,只有一個函數,並且該函數從不將值設置爲0.0,所以我不確定它們爲什麼會恢復到原始值。任何想法爲什麼會發生這種情況?

+3

發佈您的完整代碼,我確定它有一個錯誤。另外,使用構造函數初始值設定項。 –

+0

緩衝區溢出,野指針,過早刪除對象...我們可以看到更多的代碼嗎? – fredoverflow

+1

另外,你如何確定這些值爲零?取決於你的輸出方法,非常小的值可能會出現*爲零,實際上它們不是。 – fredoverflow

回答

0

當增加或減少一個小值時,嘗試使用float類型轉換,如dx = dx +(float)0.001; 最好嘗試使用double而不是float.Float有一些精度問題。

+3

Double具有同樣的精度問題。當然,你有更多的準確性,但你仍然在處理浮點數學。 –

+0

只是一個較小的值雙倍可以解決,而浮動不 – Rasel

9

我的心理調試技能表明了一些可能性:

  • 你遮蔽成員當你將他們float dX = small_float_value;dX = small_float_value;
  • ,而不是你有和shapeObject不同副本修改後的一個工作得到投擲(或者它的拷貝構造函數不會做明顯的事情)。
  • 只有值出現在打印中仍爲零,但實際上是您想要的小浮點值。
  • 不知何故小浮動值被截斷爲零。
+5

+1令人印象深刻的心理調試技能! – fredoverflow

+0

你的技能給我留下了深刻的印象。 –

+0

+1但是來吧,集中一點,把它縮小到1而不是4 :-) – Praetorian

0

也許某個地方的小浮動值被投入到一個int之前被添加/減去所以導致的變化爲零?

需要看到更多的代碼才能做更多的事情,而不是刺入黑暗中。