2014-01-10 3 views
0

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

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); 
+0

Решение вы связаны с использований 'станд :: list', [и работает на coliru] (HTTP: // coliru.stacked-crooked.com/a/a125e012d59d1b35). Что такое 'LinkedList'? Это не 'std ::', а 'insert()' не имеет перегрузки, которая принимает только один параметр. – JBL

+0

Я только что редактировал сообщение, чтобы показать публичную функцию связанного списка! – user3049955

+0

На какой строке это ошибки? «Вставить»? Или другие? (В частности, проверьте, не являются ли ошибки на 'insert'line, что это не только часть стека вызовов). – JBL

ответ

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

Больше никаких ошибок компиляции, но каким-то образом механизм не работает нормально. Когда я показываю элементы в l, он возвращает некоторые странные значения мусора, такие как этот: 0x3d0fe0, а не перечислять атрибуты объекта. – user3049955

Смежные вопросы