C ++模板:无法将函数定义与现有声明匹配

时间:2014-12-06 05:55:34

标签: c++ visual-studio-2013

我目前正在为我的游戏引擎设计一个模板化的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。

1 个答案:

答案 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);
}