容器中存放虚基类指针,用迭代器遍历产生错误,呼唤大神前辈们的指导呀!!!
小弟练习做多态的练习,将new出来继承类的地址存在虚基类的指针中,然后将指针用vector存放,之后尝试用迭代器遍历,遇到编译错误error: conversion from '__gnu_cxx::__normal_iterator<ExprNode* const*, std::vector<ExprNode*, std::allocator<ExprNode*> > >' to non-scalar type '__gnu_cxx::__normal_iterator<ExprNode**, std::vector<ExprNode*, std::allocator<ExprNode*> > >' requested
小弟于是尝试下面第二中遍历方法,编译便不报错了,小弟好奇,很想知道其中原因,请大神们帮助解答呀!!
小弟只粘贴了部分代码(基类和继承类的声明和定义都省去了,感觉问题就是在迭代器上
for (vector<ExprNode*>::iterator it = un.myPtrVec.begin(); it != un.myPtrVec.end(); ++it) {
NumNode* tempI = dynamic_cast<NumNode*>(*it);
UnaryNode* tempU = dynamic_cast<UnaryNode*>(*it);
BinaryNode* tempB = dynamic_cast<BinaryNode*>(*it);
MutiaryNode* tempM = dynamic_cast<MutiaryNode*>(*it);
for (unsigned i = 0; i < myPtrVec.size(); ++i) {
NumNode* tempI = dynamic_cast<NumNode*>(myPtrVec[i]);
UnaryNode* tempU = dynamic_cast<UnaryNode*>(myPtrVec[i]);
BinaryNode* tempB = dynamic_cast<BinaryNode*>(myPtrVec[i]);
MutiaryNode* tempM = dynamic_cast<MutiaryNode*>(myPtrVec[i]);
# include <iostream>
# include <vector>
using namespace std;
class Foo {
public:
virtual void bar() = 0;
virtual ~Foo() {};
};
class A : public Foo {
void bar() { cout << "A\n"; }
};
class B : public Foo {
void bar() { cout << "B\n"; }
};
int main()
{
vector<Foo *> v;
v.push_back(new A);
v.push_back(new B);
for (vector<Foo *>::iterator it = v.begin(); it != v.end(); ++it)
{
Foo * p = *it;
p->bar();
delete p;
}
return 0;
}