我目前正在为我的游戏引擎设计一个模板化的Vector2类。
为了保持一切整洁,我一直在分离函数声明和定义。这对构造函数工作正常,但是,当我尝试使用静态函数时,我得到以下错误:
error C2244: 'spl::Vector2<T>::Dot' : unable to match function definition to an existing declaration
1> definition
1> 'T spl::Vector2<T>::Dot(const spl::Vector2<L> &,const spl::Vector2<R> &)'
1> existing declarations
1> 'T spl::Vector2<T>::Dot(const spl::Vector2<L> &,const spl::Vector2<R> &)'
我发现不寻常的是,尽管声明和定义相同,但编译器无法匹配它们。
这是我的Vector2类:
// The Vector2 Class
template <typename T>
class Vector2{
public:
// Constructor
Vector2 ();
Vector2 (T Value);
Vector2 (T XAxis, T YAxis);
// Static Functions
template <typename L, typename R>
static T Dot (const Vector2 <L>& LHS, const Vector2 <R>& RHS);
// Variables
T x, y;
};
这是位于其下方的函数声明:
// Return The Dot Product Of Two Vectors
template <typename T, typename L, typename R>
T Vector2 <T>::Dot (const Vector2 <L>& LHS, const Vector2 <R>& RHS){
T xAxis = (T) LHS.x * (T) RHS.x;
T yAxis = (T) LHS.y * (T) RHS.y;
return (xAxis + yAxis);
}
如果有人知道为什么会抛出这个错误以及如何修复它,那么我将永远为你负债。
P.S。我在Windows 8.1计算机上使用Visual Studio 2013 Ultimate。
答案 0 :(得分:2)
语法必须是:
template <typename T>
template <typename L, typename R>
T Vector2 <T>::Dot (const Vector2 <L>& LHS, const Vector2 <R>& RHS){
T xAxis = (T) LHS.x * (T) RHS.x;
T yAxis = (T) LHS.y * (T) RHS.y;
return (xAxis + yAxis);
}