向量迭代
问题描述:
我有向量迭代
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());
。但像其他人所说的那样,这可能并不总是可能的。