c ++模板不起作用

时间:2014-09-02 08:50:56

标签: c++ templates

//class template
#include<iostream>
using namespace std;

template <class T> class Pair{
        T value1,value2;
    public:
        Pair(T first,T second){
            value1 = first;
            value2 = second;
        }       
        T getMax();     
};

template<class T> 
T Pair::getMax(){
    T max;
    max = (value1 > value2) ? value1 : value2;
    return max; 
}

int main(){
    Pair my(100,200);
    cout << my.getMax() << endl;
    return 0;
}

当我运行程序时,问题出现了:

[Error] F:\c#\cplusplus\demo_code\demo11_template2.cpp:16: error: `template<class T> class Pair' used without template parameters 

出现问题的地方是“T Pair :: getMax(){”;

[Error] F:\c#\cplusplus\demo_code\demo11_template2.cpp:18: error: `value1' was not declared in this scope
[Error] F:\c#\cplusplus\demo_code\demo11_template2.cpp:18: error: `value2' was not declared in this scope

问题出现在max = (value1 > value2) ? value1 : value2;

行的地方

为什么会导致这个问题?我希望真诚地得到帮助,谢谢!

我的英语很差,很抱歉!!

2 个答案:

答案 0 :(得分:4)

将函数定义写为

template<class T> 
T Pair<T>::getMax(){
    T max;
    max = (value1 > value2 ? value1 : value2 );
    return max; 
}

也不使用变量max。你可以写简单

template<class T> 
T Pair<T>::getMax(){
    return value1 > value2 ? value1 : value2; 
}

通常,如果两个值相等,则选择第一个值作为最大值。所以我会编写像

这样的函数
template<class T> 
T Pair<T>::getMax(){
    return value1 < value2 ? value2 : value1; 
}

一个类不能推断出它的模板参数。所以你需要写

Pair<int> my(100,200);

答案 1 :(得分:2)

Pair是一个模板,而不是一个类型,所以你需要一个类型,你必须指定它:

template<class T>
T Pair<T>::getMax()
      ^^^

因此:

Pair<int> my(100,100);