2017-10-05 33 views
-3

對於一個任務,我不得不創建一個LinkedList類,這裏是頭信息:敵不過運營商=,構造函數創建一個指針

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


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

的構造是:

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

我試圖用這樣的隊列:

class EventQueue { 
public: 
    LinkedList events; 

最後錯誤發生在這裏,我嘗試創建的解釋構造函數用於 的EventQueue做:

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

它拋出一個錯誤,敵不過運營商=,操作數類型是鏈表和LinkedList *。

爲什麼LinkedList的構造函數會創建一個指針?我無法找到會導致該問題的原因或解決方法。

編輯:謝謝你的迴應每個人我覺得自己像一個巨大的白癡,我得到了一堆未定義的引用錯誤,並認爲我不得不改變構造函數,所以我嘗試了全新的對象事物。實際上,錯誤是在我的makefile中,我沒有正確鏈接LinkedList.o文件。謝謝大家回答我的問題!

+5

該構造函數不會創建一個指針。 '新'呢。這應該在任何入門C++書中解釋 – juanchopanza

回答

3

new用於動態分配對象,因此它總是返回一個指針。

由於您宣稱eventsLinkedList,而不是LinkedList*,因此您無需執行任何操作即可對其進行初始化。當您創建EventQueue時,將自動調用LinkedList的構造函數。

1

表達式new LinkedList()返回指向新對象LinkedList的指針,而您的數據成員LinkedList events;是對象(而不是指向對象的指針)。 請注意,使用LinkedList events;對象events會在創建EventQueue對象時自動獲取(默認)初始化;在這一點上,默認的構造函數LinkedList被隱式調用。 因此,只需刪除行events = new LinkedList();