Как получить итератор для вектора объектов из шаблона? - PullRequest
1 голос
/ 19 марта 2010

Я занят реализацией Graph ADT в C ++. У меня есть шаблоны для ребер и вершин. В каждой вершине у меня есть вектор, содержащий указатели на грани, которые к ней относятся. Теперь я пытаюсь получить итератор по этим краям. Это строки кода:

vector<Edge<edgeDecor, vertexDecor, dir>*> edges = this->incidentEdges();
vector<Edge<edgeDecor, vertexDecor, dir>*>::const_iterator i;
for (i = edges.begin(); i != edges.end(); ++i) {

Однако компилятор не примет среднюю строку. Я довольно новичок в C ++. Я что-то пропустил? Почему я не могу объявить итератор для объектов из шаблона Edge? Компилятор не дает никаких полезных отзывов.

Большое спасибо Ниль

1 Ответ

3 голосов
/ 19 марта 2010

Если этот фрагмент взят из шаблона, вы, вероятно, столкнулись с проблемой зависимых имен - используйте typename:

typename vector<Edge<edgeDecor, vertexDecor, dir>*>::const_iterator i;

typename, чтобы сообщить компилятору, что вы ссылаетесь на тип.Без этого предполагается, что зависимые имена не являются типами или шаблонами.

Для более подробной информации смотрите, например, FAQ по шаблонам Comeaus .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...