Шаблон C++: 'не получен из типа'

Почему этот код не действителен?

#include <vector>

template <typename T>
class A {
  public:
    A() { v.clear(); }

    std::vector<A<T> *>::const_iterator begin() {
      return v.begin();
    }

  private:
    std::vector<A<T> *> v;
};

GCC сообщает о следующих ошибках:

test.cpp:8: error: type 'std::vector<A<T>*, std::allocator<A<T>*> >' is not derived from type 'A<T>'
test.cpp:8: error: expected ';' before 'begin'
test.cpp:12: error: expected `;' before 'private'

Что не так? Как зафиксировать его?

7
задан Lankymart 27 May 2014 в 17:36
поделиться

2 ответа

Вам нужно добавить typename, поскольку типы зависят друг от друга, и компилятор не может определить, действительно ли это тип.

Однако в gcc 4.5.0 я получаю более краткое сообщение об ошибке:

test.cc:8:3: error: нужно 'typename' перед 'std :: vector *> :: const_iterator ', потому что' std :: vector *> 'является зависимой областью

3
ответ дан 6 December 2019 в 12:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: