Векторный итератор - PullRequest
       19

Векторный итератор

0 голосов
/ 08 марта 2010

у меня

class CBase
{
.......
};

class CDerived : public CBase
{
......
};

vector<CBase*> mpBase;
vector<CDerived*>::iterator InfoIt;

InfoIt=mpBase.begin();

VC ++ 2008 генерирует ошибку C2679. Что не так?

Ответы [ 3 ]

0 голосов
/ 08 марта 2010

Не все CBase s CDerived s. Скажем, есть другие классы, полученные из CBase. Тогда что значит интерпретировать CDerived2 * как CDerived *? Что значит интерпретировать CBase * как CDerived *? Оба этих типа можно поместить в вектор CBase.

0 голосов
/ 08 марта 2010

Вы всегда можете использовать простой указатель объекта; CDerived* foo = (CDerived*)*(mpBase.begin());. Но, как говорили другие, это не всегда возможно.

0 голосов
/ 08 марта 2010

Это не законно. Вам нужно использовать итератор того же типа, что и вектор. Если вектор действительно содержит указатели на объекты CDerived, сделайте его vector<CDerived*>. Если этого не произойдет, вам нужно попробовать уменьшить объекты в векторе, что, конечно, может не сработать. Вы можете посмотреть на dynamic_cast в этом случае.

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