2011-05-25 107 views
0

我爲我的一個項目創建了一個助手命名空間,我希望它能夠使用所有類型,如整數,浮點數,雙打等等。但它好像我只是不能獲取模板對。模板化拋出了很多錯誤

無論如何,這裏是我目前的代碼,我的編譯器不會吐出關於文件本身的錯誤,但是當我編譯它時,它會在其他文件中吐出數百個錯誤。 這些錯誤是不是有當我刪除模板文件中:

#include "..\util\Logger.hpp" 

namespace gm 
{ 
    namespace math 
    { 
     namespace MathHelper 
     { 
      // Value of Pi 
      const double PI = 3.1415926535897932384626433832795028841972; 
      // Value of euler 
      const double E = 2.7182818284590452353602874713526624977572; 

      // Convert radians to degrees 
      template <typename T> 
      T Rad2Deg(T angle) 
      { 
       return angle * (180/(T)PI); 
      } 

      // Convert degrees to radians 
      template <typename T> 
      T Deg2Rad(T angle) 
      { 
       return angle * ((T)PI/180); 
      } 

      // Clamp a value in between the given min and max 
      template <typename T> 
      T Clamp(T value, T min, T max) 
      { 
       if(min > max) { gm::util::Logger::DisplayError("Invalid argument in MathHelper::Clamp, max is over min"); } 
       if(value < min) { value = min; } 
       if(value > max) { value = max; } 
       return value; 
      } 

      // Exponentiate value a with value b 
      template <typename T> 
      T Exp(T a, int b) 
      { 
       if(b < 0) { gm::util::Logger::DisplayError("Invalid argument in MathHelper::Exp, b must be positive"); } 
       T value = a; 
       for(int i = 1; i < b; i++) { value *= a; } 
       return value; 
      } 

      // Get the absolute value of the value passed 
      template <typename T> 
      T Abs(T a, T b) 
      { 
       if(value < 0) { value = -value; 
       return value; 
      } 
     }; 
    }; 
}; 

我把編譯錯誤在該貼:http://pastebin.com/AxwmDyDh

+0

什麼錯誤?另外,不要在包含中使用反斜槓。 – 2011-05-25 14:41:56

+3

當我讀到這個問題的標題時,我真的不得不笑了。 – 2011-05-25 14:42:43

+1

你爲什麼使用模板?你期望人們通過一個字符串或員工來這些功能?你寫這些只是爲了練習嗎?如果你只是需要某種東西的絕對價值,那就已經完成了。最後,顯示第一組錯誤和產生它們的調用代碼行。 – 2011-05-25 14:44:15

回答

2

你度/弧度轉換功能將無法正確工作。我無法弄清楚你爲什麼在那裏。

如果您在任何地方都有using namespace,使用變量名稱如minmax會導致問題。

您的abs函數缺少if上的關閉}。這可能會在呼叫點造成錯誤。

1

花括號中if錯過。如果您在int通爲T因爲PI將被截斷在做轉換之前爲int

if(value < 0) { value = -value; 
+0

哦,上帝,我覺得這麼愚蠢 - – user769777 2011-05-25 14:48:34