я имею
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);
Следующий фрагмент кода прекрасно компилируется с 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;
}
Других решений пока нет …