J'aiVector iterator
class CBase
{
.......
};
class CDerived : public CBase
{
......
};
vector<CBase*> mpBase;
vector<CDerived*>::iterator InfoIt;
InfoIt=mpBase.begin();
VC++ 2008 génère une erreur C2679. Qu'est-ce qui ne va pas?
J'aiVector iterator
class CBase
{
.......
};
class CDerived : public CBase
{
......
};
vector<CBase*> mpBase;
vector<CDerived*>::iterator InfoIt;
InfoIt=mpBase.begin();
VC++ 2008 génère une erreur C2679. Qu'est-ce qui ne va pas?
Ce n'est pas légal. Vous devez utiliser un itérateur du même type que le vecteur. Si le vecteur contient réellement des pointeurs vers des objets CDerived, définissez vector<CDerived*>
. Si ce n'est pas le cas, vous devrez essayer de descendre les objets dans le vecteur, ce qui, bien sûr, peut ne pas réussir. Vous voudrez peut-être regarder dans dynamic_cast
dans ce cas.
Tous les fichiers CBase ne sont pas CDerived s. Dites qu'il existe d'autres classes dérivées de CBase. Alors qu'est-ce que cela signifie d'interpréter CDerived2 * comme un CDerived *? Qu'est-ce que cela signifie d'interpréter un CBase * comme un CDerived *? Il est possible de mettre ces deux types dans un vecteur CBase.
Vous pouvez toujours utiliser un objet pointeur simple; CDerived* foo = (CDerived*)*(mpBase.begin());
. Mais comme les autres l'ont dit, ce n'est pas toujours possible.