向量迭代

问题描述:

我有向量迭代

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

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

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

InfoIt=mpBase.begin(); 

VC++ 2008生成错误C2679。怎么了?

这不合法。您需要使用与矢量类型相同的迭代器。如果矢量确实包含指向CDerived对象的指针,则将其设置为vector<CDerived*>。如果不这样做,则需要尝试向下转换矢量中的对象,当然这可能不会成功。在这种情况下,您可能需要查看dynamic_cast

并非所有的CBase 都是CDerived s。说有从CBase派生的其他类。那么将CDerived2 *解释为CDerived *意味着什么?将CBase *解释为CDerived *意味着什么?可以将这两种类型放入CBase向量中。

你总是可以使用一个简单的指针对象; CDerived* foo = (CDerived*)*(mpBase.begin());。但像其他人所说的那样,这可能并不总是可能的。