Почему вектор:: действительный итератор и вектор* :: нет итератора? - PullRequest
1 голос
/ 27 июля 2010

У меня есть три взаимосвязанных члена класса:

vector<Frame*>* poolFrames;
vector<Frame*>*::iterator frameIterator;
vector<vector<Frame*>::iterator>* poolFrameIterators;

Когда я компилирую, gcc сообщает мне

error: недопустимое использование '::' error: Ожидается ';'перед 'frameIterator'

Применительно к средней строке, где я определяю frameIterators.Он исчезает, когда я теряю указатель на вектор и делаю его вектором :: iterator.Тем не менее, я хочу, чтобы они были указателями.Есть ли особый способ определить тип данных, который я хочу, или мне нужно использовать vector :: iterator и затем разыменование?

Ответы [ 5 ]

4 голосов
/ 27 июля 2010

Я вижу, что вы пытались сделать. Вы определили poolFrames как указатель на вектор. Затем вы хотите определить frameIterator как итератор для poolFrames. Поскольку poolFrames является указателем, вы думаете, что вам нужен специальный итератор указатель на вектор, но вы ошибаетесь.

Векторный итератор - векторный итератор - векторный итератор, независимо от того, как вам удалось сослаться на вектор в первую очередь. Вам нужно frameIterator, чтобы быть простым итератором:

vector<Data*>::iterator frameIterator;

Чтобы присвоить значение этой переменной, вам нужно разыменовать ваш векторный указатель, например:

frameIterator = poolFrames->begin();

Если бы poolFrames был вектором вместо указателя на вектор, вместо него вы бы использовали оператор точки: poolFrames.begin().

2 голосов
/ 27 июля 2010

Если вы хотите, чтобы указатель на итератор делал это следующим образом:

vector<Frame*>::iterator*

Звездочка всегда следует за указанным типом.То, как вы это делаете, очень похоже на написание vector*<Frame*>::iterator, там просто звездочка в неправильном месте.

1 голос
/ 27 июля 2010

Какой тип данных вы на самом деле хотите?

vector<Frame*>* poolFrames; - указатель на вектор указателей фреймов. Вы на самом деле просто хотите вектор указателей Frame?

В этом контексте ошибка имеет смысл. У vector<Frame*> есть итераторы. Указатель на такую ​​вещь не имеет итераторов.

0 голосов
/ 27 июля 2010
vector<Frame*>* 

Это выражение типа, но оно не имеет члена iterator Это похоже на использование . для указателя.

0 голосов
/ 27 июля 2010

Тип вектора * - это указатель без итераторов.

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