2017-10-05 13 views
-3

を作成し、ここでヘッダ情報がある:演算子=のための一致なし、コンストラクタは、私がLinkedListのクラスを作成する必要がありました割り当てのためにポインタ

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


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

コンストラクタは次のとおりです。

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

そしてI

最後にエラーが発生し、ここでconstruを作成しようとしています行って、 EventQueueのためCTOR:

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

そして、それは誤り、オペレータのための不一致をスロー=、オペランドの型は*のLinkedListとLinkedListのです。

なぜLinkedListのコンストラクタがポインタを作成しますか?私はそれを引き起こす原因や解決方法を見つけることができません。

EDIT:私は巨大なばかだと感じている皆さん、私は定義されていない参照エラーがたくさんありました。コンストラクタを変更しなければならないと思っていました。実際には、私のMakefileにエラーがあり、LinkedList.oファイルが正しくリンクされていませんでした。私の質問に答えてくれてありがとう!

+5

コンストラクタはポインタを作成しません。 「新」はそうです。これは、C++の入門書で説明する必要があります – juanchopanza

答えて

3

newは、オブジェクトの動的割り当てに使用されるため、常にポインタを返します。

eventsLinkedListであり、LinkedList*ではないので、初期化するために何もする必要はありません。 LinkedListのコンストラクタは、EventQueueを作成すると自動的に呼び出されます。

1

new LinkedList()は、新しいLinkedListオブジェクトへのポインタを返しますが、データメンバLinkedList events;はオブジェクトです(オブジェクトへのポインタではありません)。 LinkedList events;オブジェクトeventsは、EventQueueオブジェクトが作成されると自動的に(デフォルト)初期化されます。この時点で、デフォルトコンストラクタLinkedListが暗黙的に呼び出されます。 したがって、単に行を削除してください。events = new LinkedList();

関連する問題