template < class T>
class T1
{
public:
void F1( )
{
T a; //думаю здесь ты хотел T поставить, а не int
F3( a);
}
void F2( )
{
T a;
}
void F3 ( T a)
{
}
};
int main( )
{
T1< int> b;
b. F2( );
}
Шаблонная функция в классе
class T1
{
public:
void F1();
template<class T> void F2();
template<class T> void F3(T a);
};
void T1::F1()
{
int a;
F3(a);
}
template<class T> void T1::F2()
{
T a;
}
template<class T> void T1::F3(T a)
{
}
void main()
{
T1 b;
b.F2<int>();
}
Ошибка выдается на строчке b.F2<int>(); error C2062: type 'int' unexpected
Меняй компиялотор. В следующей версии студии такого нет.
Попробуй так:
Код:
template <class T> template <class X>
int __fastcall TtList<T>::Add (const X &Param)
int __fastcall TtList<T>::Add (const X &Param)
То есть, чтобы создать шаблон конкретного метода класса, нужно, чтобы тип реализации шаблона определялся типом параметра.
Цитата: The_Ice
Т.е. создавай шаблон класса, а не его функций
Это не подходящее решение. Автору нужен шаблонный метод, а не класс.
[QUOTE=el scorpio]
То есть, чтобы создать шаблон конкретного метода класса, нужно, чтобы тип реализации шаблона определялся типом параметра.
[/QUOTE]
Такой нужды нет, если компилятор поддерживает стандарт в должной мере. В стандарте нигде не сказано, что "нужно, чтобы тип реализации шаблона определялся типом параметра".
Я поднимал как-то этот вопрос:
http://forum.codenet.ru/showthread.php?t=5001
Описанная автором проблема является, как уже сказал aks, недостатком VC 6.0 и прочих стареньких компиляторов.
Пути решения два:
1) использовать другой компилятор,
2) воспользоваться "хитростью" с передачей вцелом ненужного параметра:
Код:
class T1
{
public:
template<class T> void F2(T);
};
void main()
{
T1 b;
b.F2( (int)0 );
}
{
public:
template<class T> void F2(T);
};
void main()
{
T1 b;
b.F2( (int)0 );
}
P.S. Mad Kit, пользуйся тегом [сode].......[/сode] для кода.