如何使链表与多个类实例一起工作?

时间:2014-01-10 16:34:00

标签: c++ linked-list polymorphism

我有

class A{
}
class B : virtual public A{
  extra property 1
}
class C : virtual public A{
  extra property 2
}
class D : virtual public A{
}
class E : virtual public B, virtual public C, virtual public D{
  extra property 3
}

这是我的链表的插入功能:

template <typename T>
class LinkedList {
   Node<T> *start;
   Node<T> *current;
public:
void insert (T newElement)
{
  if ( isEmpty() )
  {
     insertToStart(newElement);
  }
  else
  {
     Node<T> *newNode = new Node<T>;
     newNode->info = newElement;
     newNode->next = NULL;
     current = start;
     while (current->next != NULL)
     {
        current = current->next;
     }
     current->next = newNode;
  }
}

现在我想创建一个链接列表,它将存储B,C和D的所有实例,而不会丢失每个子类的附加属性。如何使用指针实现此目的? 我已经尝试了here提供的解决方案,但它给了我这个错误:获取临时[-fpermissive]的地址。

Linkedlist<A*> list;
B b;
list.insert(&b);

1 个答案:

答案 0 :(得分:0)

以下代码用gcc 4.8编译好:

#include <list>

class A
{
};

class B : virtual public A
{
};

int main()
{
    std::list<A*> l;

    B* b = new B();
    l.push_back(b);

    B bb;
    l.push_back(&bb);

    return 0;
}