В этой строке вам не хватает ключевого слова typename
:
std::vector<A<T> *>::const_iterator begin(){
Вам нужно:
typename std::vector<A<T> *>::const_iterator begin(){
Это потому, что std::vector<A<T> *>
зависит от параметра шаблона (T
) шаблона класса (A
). Чтобы разрешить правильный анализ шаблона без необходимости делать какие-либо предположения о возможных специализациях любых других шаблонов, языковые правила требуют, чтобы вы указывали, какие зависимые имена обозначают типы, используя ключевое слово typename
.