模板抛出很多错误

问题描述

| 我正在为我的一个项目创建一个助手名称空间,我希望它能够使用所有类型,例如int,float,doubles等。但是似乎我只是无法正确使用模板。 无论如何,这是我当前的代码,我的编译器不会吐出有关文件本身的错误,尽管当我编译它时,它会吐出其他文件中的数百个错误。 当我删除文件中的模板时,这些错误不存在: @H_502_1@#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     

解决方法

如果您将ѭ1传递给
T
,则deg / rad转换功能将无法正常工作,因为PI在执行转换之前会被截断为int。我不太清楚你为什么要在那里。 如果任何地方都有
using namespace
,则使用变量名称如
min
max
会引起问题。 您的
abs
函数缺少
if
上的闭合
}
。这可能会在呼叫点导致错误。     ,
if
中缺少花括号。
if(value < 0) { value = -value;