【发布时间】:2013-10-12 04:45:34
【问题描述】:
我有一个具有以下继承结构的程序
List
/ \
DoublyLinkedList CircularlyLinkedList
\ /
CircularlyDoublyLinkedList
在List 类(完全抽象)中,我有一个纯虚函数
int virtual insert(List **head, int position) = 0;
我在 DoublyLinkedList 和 CircularlyLinkedList 类中覆盖了它。
为了解决CircularlyDoublyLinkedList 类中的歧义,我使用范围解析运算符:: 明确指定要继承的insert() 函数的哪个版本,例如:DoublyLinkedList::insert(..)
我的问题是这个语句
List *cdll_head = new CircularlyDoublyLinkedList();
抛出错误
"cannot convert CircularlyDoublyLinkedList* to List*"
当我将语句更改为
CircularlyDoublyLinkedList *cdll_head = new CircularlyDoublyLinkedList();
我收到另一个错误,因为 insert(...) 接受了 List** 类型的参数
如何在没有演员表的情况下解决此问题?
【问题讨论】:
标签: c++ inheritance diamond-problem