2014-09-02 10 views
-1
//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; 
} 

при запуске программы, возникает проблема:C++ шаблон не работают

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

почему причиной проблемы? Я надеюсь получить искреннюю помощь, спасибо!

Я беден по-английски, очень жаль !!

ответ

4

Написать определение функции как

template<class T> 
T Pair<T>::getMax(){ 
    T max; 
    max = (value1 > value2 ? value1 : value2); 
    return 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

Почему бы не просто «вернуть значение1> значение2? value1: value2'? –

+0

@Wojtek Surowka Я могу ответить, почему бы не использовать std :: max? :) –

+0

@ VladfromMoscow Предполагая, что OP создает этот код в качестве учебного упражнения, «использование' std :: max' »в этом не поможет, вы можете пропустить переменную 'max', которая все еще учит их чему-то. – Angew

2

Pair шаблон, а не тип, поэтому там, где вам нужен тип, который вы должны задать его следующим образом:

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

и, таким образом:

Pair<int> my(100,100); 
+0

большое спасибо – Edward

Смежные вопросы