2008-11-11 4 views

답변

18

당신은 유형부터 당신이 할, 그 라인의 앞에 typename을 둘 필요가 :: 반복자를이 같이 템플릿 파라미터 T.에 따라 달라집니다시 :

template< class T > 
void example() { 
    typename std::list< boost::function<T()> >::iterator it; 
} 

선을 고려

std::list< boost::function<T()> >::iterator * it; 

이것은 곱셈 또는 포인터를 의미 할 수 있습니다. 그렇기 때문에 의도를 분명히하기 위해 typename이 필요합니다. 그것 없이는, 컴파일러는 타입이 아니라고 가정하고, 거기에 연산자 또는 구문 론적으로 세미콜론을 요구합니다.


또한 새로운 C++ FAQ 항목 Where to put template and typename on dependent names을 참조하십시오.

관련 문제