Не компилируется такой код:
template<class T>
struct A{
template<class U>
void Test(){}
};
void f()
{
A<float> a;
a.Test<int>(); // ok
}
template<class T>
void g()
{
A<T> a;
a.Test(); // ok
a.Test<int>(); // ошибка компиляции!
}
1) Не могу понять причину ошибки.
2) Как решить/обойти проблему?
Сообщение об ошибке:
file.cpp|16|error: expected primary-expression before 'int'
file.cpp|16|error: expected ';' before 'int'
Спасибо за помощь.
template<class T>
struct A{
template<class U>
void Test(){}
};
void f()
{
A<float> a;
a.Test<int>(); // ok
}
template<class T>
void g()
{
A<T> a;
a.Test(); // ok
a.template Test<int>(); //<<<<<<<<<<<<<<<<<<<<<<<
}
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niralex, Вы писали:
N>2) Как решить/обойти проблему?
a.template Test<int>();
N>1) Не могу понять причину ошибки.
Шаблонный класс A может иметь специализации, которые ещё не известны при первой встрече функции g. Т.е. функция Test может быть шаблонной, а может и не быть. Нужно явно выбрать и сообщить какая она.