如何为非模板类​​定义模板方法?

hkB*_*sai 4 c++ methods implementation templates visual-studio

我的编译器对我实现模板方法的方式不满意.它为这些实现提供了大量错误消息,如"未定义类型T".

这是我的第一个方法,它是在类块之外实现的:

class VectorConvertor
{
    public:
        // ...
        template <class T>
        static void ReverseVectorElements(std::vector<T> & Vector);
        // ...
};

template <class T>
void VectorConvertor::ReverseVectorElements(std::vector<T> & Vector)
{
    std::vector<T>::size_type size = Vector.size();
    T swap;
    for (std::vector<T>::size_type i=0; i<size/2; i++)
    {
        swap = Vector.at(i);
        Vector.at(i) = Vector.at(size-1-i);
        Vector.at(size-1-i) = swap;
    }
}
Run Code Online (Sandbox Code Playgroud)

另一个是这个; 这次方法是在类中实现的:

class ElementaryMath
{
    public:
        // ...
        template <class T> static char sign(T num)
        {
            return (num >= static_cast<T>(0)) ? static_cast<char>(+1) : static_cast<char>(-1);
        }
        // ...
}
Run Code Online (Sandbox Code Playgroud)

我的代码有什么问题,或者这只是编译器本身的问题?

IDE和编译器:Visual Studio 2010

小智 5

你的代码看起来不错.但有一件事在我脑海中浮现.你可以检查之前是否定义了"sign"功能?只需将鼠标悬停在其上即可.C运行时库使用"#define"关键字实现其某些功能,因此您无法在之后定义具有相同名称的函数.