我是新的C++编程所以这个问题可能是基本的,但在这里它是:C++指针转换
我有四节课 - A,B,C和D.它们之间的关系定义如下:
class B : public A;
class D : public C;
A是一个抽象类(所有方法都是纯虚拟的)。 D类实现了C不支持的Print()函数。
//Class D - some code
void Print()
{
//some code
}
类A具有STL ::列表
//Class A - some code
protected:
list<C*> myObjects;
在类BI具有推向myObjects指针类型d的对象的函数(同样保持指针类C的对象, D继承C)完美的作品。
Class B : public A
{
// Some code
D* obj = new D(...);
myObjects.push_back(obj);
return obj;
}
最后,在课堂上BI有超过myObjects迭代(从A类继承)的功能,像这样:
for(list<C*>::iterator it = myObjects.begin(); it != myObjects.end(); it++)
{
//I wish to call the function D.Print() but I get an error!
D *a = *it;
a->Print();
}
错误状态:
error C2440: 'initializing': cannot convert from 'std::_List_iterator<_Mylist>' to 'D*'
我下如果“a”是指向D类对象的指针,那么如果我给它指向迭代器引用的指针的值(指向指向D类型对象的指针),我可以调用Print ()。
你能帮忙吗? 在此先感谢!
@juanchopanza我试过,但由于打印没有在C类中定义,我得到C2039:'打印':不是C.的成员。 – Tal
对不起,我错过了那部分。那么你需要尝试'dynamic_cast'。最好是用代码而不是散文表达相关信息。 – juanchopanza
而不是仅仅试图解释你有什么,用小的代码外的代码片断,为什么不创建一个[最小,完整和可验证的例子](http://stackoverflow.com/help/mcve),你可以给我们看一看?这会让你更容易理解你有什么和可能发生的事情。 –