Как заставить связанный список работать с несколькими экземплярами классов?

я имею

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 без потери дополнительного атрибута каждого дочернего класса. Как я могу добиться этого с помощью указателя?
Я попробовал предоставленное решение Вот, но это дает мне эту ошибку: получение адреса временного [-fpermissive].

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

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;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector