2017-10-05 3 views
-3
schafft

für eine Zuordnung ich eine LinkedList Klasse erstellen musste, hier ist die Kopfinfo:kein Spiel für Operator =, Konstruktor einen Zeiger

struct element{ 
    Event *data; 
    element *next; 
}; 


class LinkedList { 
    public: 
     element *first, *last; 
     LinkedList(); 

Der Konstruktor ist:

LinkedList::LinkedList() { 
    first = NULL; 
    last = NULL; 
} 

Und ich Ich versuche so eine Warteschlange damit zu machen:

class EventQueue { 
public: 
    LinkedList events; 

Und schließlich tritt der Fehler hier auf, wo ich versuche, das Konstrukt zu erstellen Ctor für Eventqueue by doing:

EventQueue::EventQueue(){ 
    events = new LinkedList(); 
} 

Und es wirft einen Fehler, keine Übereinstimmung für Operator =, Operandentypen sind LinkedList und LinkedList *.

Warum erstellt der Konstruktor für LinkedList einen Zeiger? Ich kann nicht finden, was das verursachen würde oder wie ich es beheben könnte.

EDIT: Danke für die Antworten jeder ich fühle mich wie ein riesiger Idiot, ich bekam eine Reihe von undefined Referenzfehler und dachte, ich musste den Konstruktor ändern, also habe ich die ganze neue Objekt-Sache ausprobiert. In Wirklichkeit war der Fehler in meinem Makefile, wo ich die LinkedList.o-Datei nicht ordnungsgemäß verknüpfte. Danke an alle, die meine Frage beantwortet haben!

+5

Der Konstruktor keinen Zeiger erstellen. 'neu' tut es. Dies sollte in jedem einführenden C++ Buch erläutert werden – juanchopanza

Antwort

3

new wird für die dynamische Zuordnung von Objekten verwendet, so dass es gibt immer einen Zeiger.

Da Sie events als LinkedList, nicht LinkedList* deklariert haben, müssen Sie nichts tun, um es zu initialisieren. Der Konstruktor für LinkedList wird automatisch aufgerufen, wenn Sie eine EventQueue erstellen.

1

Expression new LinkedList() einen Zeiger auf ein neues LinkedList Objekt zurückgibt, während die Daten Element LinkedList events; ist ein Objekt (und nicht ein Zeiger auf ein Objekt). anzumerken, dass mit LinkedList events; Objekt events automatisch erhält (default) -initialized wenn ein EventQueue Objekt erstellt wird; An dieser Stelle wird der Standardkonstruktor LinkedList implizit aufgerufen. entfernen So einfach die Linie events = new LinkedList();

Verwandte Themen