2017-05-08 3 views
0

私はポインタとリンクされたリストの周りに頭を抱えていました。私はこれらのタイプの質問がここで頻繁に尋ねられることを見ることができるので、私はこのフォーラムの泥沼に追加することをお詫び申し上げます。しかし、私は2日間この割り当てをラップしようとしていました、そして、私はそれを得るように見えません。C++ Copyリンクされたリストの値のコンストラクタで、アドレスではありません。

これは宿題です。

私はリンクされたリストをコピーし、古いリストを破棄し、値を保持しなければならないというプロジェクトがあります。私は、コピー・コンストラクターに、ノードだけでなく、リスト全体をほとんど渡す必要があります。

私はいくつかの掘削を行った後、すでにここにいくつかの本当に素晴らしい反応を見てきた、と私は私が達成するために必要なものに対する解決策を見てきた最も近いが、このいずれかです。私がしようとすると

Coding a function to copy a linked-list in C++

私のようなコードを実装するために、それはコンパイル時に私は、このエラーを与える:エラー:「*」単項の無効な型引数(「int型」を持っている)リンクリスト

はここにコードは次のとおりです。

IntList::IntList(const IntList &a){ 
    if(a.head != NULL) 
    { 
      ListNode *thisNode = a.head; 
      ListNode *nextN = NULL; 

      while(thisNode != NULL) 
      { 
        ListNode *newNode = new ListNode; 
        newNode->value = (*thisNode->value); //error occurs here 

        if(nextN == NULL) 
        { 
          nextN = newNode; 
        } 
        else 
        { 
          nextN->next = newNode; 
          nextN = nextN->next; 
        } 
        thisNode = thisNode->next; 
        size++; 
      } 
    } 
    else 
    { 
     cout << "The list empty." << endl; 
     return; 
    } 
} 

10行目のカプセル化を削除しても、コンストラクターはエラーを発行しません。しかし、いったんデストラクタを呼び出すと、古いリストはまだ空になったばかりのメモリを参照します。

本当にこの課題に関するおかげです。私はポインタを正しく逆参照していないと思いますが、コードを壊して動作させるように見えません...

+0

ようこそStackOverflow。 [ツアー]を取ってください。 よくある質問stackoverflow.com/help/how-to-ask、 [mcve]を作成してください。 デバッグコードのヘルプをお探しの場合は、https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Yunnosch

+0

を参照してください。newNode-> value = thisNode-> value – Kapil

答えて

0

代わりに newNode-> value =(* thisNode-> value); あなたは する必要がありますnewNode-> value = thisNode-> value;

+0

Iそれをやり始めましたが、前のリストを破棄すると、新しいリストのデータは保持されません。私はnewNode-> valueがthisNode-> valueと同じアドレスを指していると思う。私は実際に値のコピーを作成し、同じメモリにポイントするのではなく、どのように作成するのかは分かりません。 – RLee

関連する問題