typename
впервые столкнулся с ключевым словом typename
прочитать что это и зачем можно здесь:
http://alenacpp.blogspot.com/2006/08/typename.html
а я столкнулся при портировании проекта из MS VC++ 2008 под Linux g++ 4.4.5
пример:
template
void function(T1& src, unsigned int n)
{
...
std::map ::iterator I;
...
}
VC++ всем доволен, а вот g++ на эту строчку ругнулся
error: expected ‘;’ before ‘I’
получается компилятор не может понять что от него хотят, т.о. для исправления ошибки необходимо в начале строчки прописать typename:
typename std::map ::iterator I;
и всё в шоколаде
аналогично решается ошибка в строке:
for(T1::iterator I = src.begin(); I != src.end(); ++I) {
добавляем
for(typename T1::iterator I = src.begin(); I != src.end(); ++I) {
такие дела.
Вывод:
typename нужен для облегчения задачи компилятору при парсинге различных загадочных выражений.
Ключевое слово typename позволяет разрешить недоразумения, явно сказав компилятору, где речь идет о типе.
Свежие комментарии