【发布时间】:2014-04-02 08:46:58
【问题描述】:
我是 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::list,它保存指向 C 类对象的指针。
//Class A - some code
protected:
list<C*> myObjects;
在 B 类中,我有一个函数可以向 myObjects 推送指向 D 类型对象的指针(同样,D 继承了 C),它完美地工作。
Class B : public A
{
// Some code
D* obj = new D(...);
myObjects.push_back(obj);
return obj;
}
最后,在 B 类中,我有一个迭代 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 我试过了,但由于 Print 没有在 C 类中定义,我得到 C2039: 'Print' : is not a member of C.
-
对不起,我错过了那部分。然后你需要尝试
dynamic_cast。最好在代码中包含相关信息,而不是散文。 -
不只是试图解释你所拥有的,用小的脱离上下文的代码sn-ps,为什么不创建一个Minimal, Complete, and Verifiable example你可以给我们看呢?这将使您更容易理解您拥有什么以及可能发生的事情。
-
我会在接下来的问题中记住这一点。感谢您的提示。