char *s1 = new char[15];
char *s2 = new char[15];
cout << "Enter string 1: ";
cin.getline(s1, 14);
cout << "Enter string 2: ";
cin.getline(s2, 14);
cout << "----: " << (char*)getMax(s1, s2);
delete[] s2;
delete[] s1;
Явная специализация функции
Код:
Код:
typedef const char *pCh;
template<> pCh getMaxS<pCh>(pCh, pCh);
...
template<> pCh getMaxS<pCh>(pCh s1, pCh s2){
return strcmp(s1, s2) > 0 ? s1 : s2;
}
template<> pCh getMaxS<pCh>(pCh, pCh);
...
template<> pCh getMaxS<pCh>(pCh s1, pCh s2){
return strcmp(s1, s2) > 0 ? s1 : s2;
}
Ни как не могу найти ошибки. Как правильно?
Цитата: kd0x13
Здравствуйте. Помогите разобраться с шаблонами. Вот написал код
Я пока вижу такую ошибку:
Код:
cout << "----: " << (char*)getMax(s1, s2);
Код:
template<> pCh getMaxS<pCh>(pCh s1, pCh s2){
return strcmp(s1, s2) > 0 ? s1 : s2;
}
return strcmp(s1, s2) > 0 ? s1 : s2;
}
Название вызываемой функции не совпадает с названием шаблонной функции.
Цитата: kd0x13
Ни как не могу найти ошибки.
А что у вас, собственно, за проблемы - программа не компилится, или компилится но неправильно работает? Если не компилится - то что за ошибки выдаются? Лучше сразу сообщать в чем проблема (например, что за ошибки выдаются), т.к. телепатов на форуме нет...
Цитата: kd0x13
Как правильно?
Зависит от того, каковы цели всего этого. Если вам просто нужно написать функцию, сравнивающую две строки и возвращающую наибольшую (с точки зрания функции strcmp) из них, то можно и без шаблонов обойтись...
Ошибки такие:
В прототипе шаблона - unrecognizable template declaration/definition и syntax error : '<'
В определении этой функции - syntax error : missing ';' before '<' и 'pCh getMaxS' : redefinition
Правильно ли я вобще шаблон написал?
Я попробовал запустить ваш код, поместив второй фрагмент (там где объявление и определение шаблона) перед первым (который поместил в main) - выдались те же ошибки.
Сделал вот так - работает:
Код:
#include <iostream>
#include <cstring>
using namespace std;
typedef const char *pCh;
// поскольку неспециализированный шаблон в этой программе нигде не вызывается,
// здесь можно поместить только его ообъявление:
template<typename T> T getMaxS(T t1, T t2);
template<> pCh getMaxS<pCh>(pCh, pCh);
template<> pCh getMaxS<pCh>(pCh s1, pCh s2){
return strcmp(s1, s2) > 0 ? s1 : s2;
}
int main()
{
char *s1 = new char[15];
char *s2 = new char[15];
cout << "Enter string 1: ";
cin.getline(s1, 14);
cout << "Enter string 2: ";
cin.getline(s2, 14);
// s1 и s2 нужно преобразовать к pCh, иначе произойдет
// попытка вызова неспециализированного шаблона
cout << "----: " << (char*)getMaxS((pCh)s1, (pCh)s2);
delete[] s2;
delete[] s1;
}
#include <cstring>
using namespace std;
typedef const char *pCh;
// поскольку неспециализированный шаблон в этой программе нигде не вызывается,
// здесь можно поместить только его ообъявление:
template<typename T> T getMaxS(T t1, T t2);
template<> pCh getMaxS<pCh>(pCh, pCh);
template<> pCh getMaxS<pCh>(pCh s1, pCh s2){
return strcmp(s1, s2) > 0 ? s1 : s2;
}
int main()
{
char *s1 = new char[15];
char *s2 = new char[15];
cout << "Enter string 1: ";
cin.getline(s1, 14);
cout << "Enter string 2: ";
cin.getline(s2, 14);
// s1 и s2 нужно преобразовать к pCh, иначе произойдет
// попытка вызова неспециализированного шаблона
cout << "----: " << (char*)getMaxS((pCh)s1, (pCh)s2);
delete[] s2;
delete[] s1;
}
Спасибо Вам Ghox, я сначала не понял, что надо еще писать исходный шаблон, я его тупо не написал))))) Таперь разобрался, все работает, благодарю