2017-10-16 27 views
2

キューリストを作成しようとしていますが、リンクリストの参照を渡しています。参照を使用している参照を使用しているトラバースリンクリスト

In function 'void insertDataToQueue(Node **、int)':| ポインタタイプ 'Node * {aka node *}'の '* temp'のメンバー 'next'に対するリクエスト(おそらく ' - >'を使うことを意図していましたか?

void insertDataToQueue(Node **queueList, int burstTime){ 
    Node *newNode = new Node; 
    newNode->burstTime = burstTime; 
    newNode->next = NULL; 

if(queueList == NULL){ 
    *queueList = newNode; 
} 
else{ 
    Node **temp = queueList; 
    while(*temp != NULL) 
     temp = *temp->next; 
} 
} 
+1

会員アクセスは参照外よりも優先度が高くなります。[こちら](http://en.cppreference.com/w/cpp/language/operator_precedence) – user463035818

+0

を参照してください。どうすればこのリストをトラバースできますか? –

+0

どのような目的のために( 'namespace std'に既に存在する)データ構造を書いていますか? – Caleth

答えて

0

-> has higher precedence than *ので、あなたが最初の間接参照にしたいと、あなたはブラケットを使用することができますメンバーにアクセスする場合は、この

*temp->next; 

は、

*(temp->next); 

として解析されます。

(*temp)->next; 
への単純なポインタが十分にある、リスト全体を反復するために
+1

しかし、 'temp'は'ノード** 'です。私は彼がこのように宣言されなければならないと思います: 'Node * temp = * queueList' – Garf365

+1

@ Garf365 tbh複数の' * 'があると失われます。私はポインターなしでC++を書くことができることを認識して以来、これ以上使用していません。私は尋ねられた行に答えを集中しようとしましたが、それは唯一のエラーではないかもしれません – user463035818

+1

あなたの答えで、この行 'temp =(* temp) - > next; tempは 'Node **'と '(* temp) - > next;は' Node * 'です。 – Garf365

2

void insertDataToQueue(Node **queueList, int burstTime){ 
    Node *newNode = new Node; 
    newNode->burstTime = burstTime; 
    newNode->next = NULL; 

    if(queueList == NULL) { 
     *queueList = newNode; 
    } 
    else { 
     Node *temp = *queueList; 
     // Find last element, ie element who "next" field is NULL 
     while(temp->next != NULL) { 
      temp = temp->next; 
     } 
     // Make last element to point to new element 
     temp->next = newNode; 
    } 
} 

、任意のリンクせずに、私は考えます(と私は願っています)のみ側面を学ぶためのものです。あなたが必要とするすべてのコンテナとしてのC++。たとえば、リンクリストにあるstd::listまたはstd::queueがあります。プロダクションコードの場合は、自分で開発する代わりに使用することをお勧めします。