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

标签 c++ visual-studio templates methods implementation

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

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

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;
    }
}

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

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);
        }
        // ...
}

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

IDE 和编译器:Visual Studio 2010

最佳答案

我觉得你的代码没问题。但是我想到了一件事。你能检查一下之前是否定义了函数“sign”吗?只需将鼠标悬停在上面即可。 C 运行时库使用“#define”关键字实现它的一些函数,因此您之后不能定义具有相同名称的函数。

关于c++ - 如何为非模板类​​定义模板方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4723880/

相关文章:

c++ - 最大化的 WS_POPUP 窗口位于任务栏前面

visual-studio - 适用于Visual Studio 2019的Team Foundation Server Power Tools

Visual Studio中的C++运行结构

c++ - 如何在 C++ 中将值与模板和 boost 进行比较?

c++ - 根据条件类型转换为不同的类

c++ - 用 RBGA 值填充枚举

c++ - 三重继承,没有唯一的最终覆盖

c++ - 在 visual studio 6 中将安装程序作为 C++ 实用程序的一部分包含在内

没有 .cpp 文件的 C++ 类?

c++ - 隐藏成员模板的模板参数