2016-04-12 11 views
-2

Student型のオブジェクトを保持するノードを二重リンクリストに体系化しようとしています。手動でノードを作成してリストに追加すると、二重にリンクされたリストが正常に機能しますが、ループ内でノードをインスタンス化すると、ポインタがオーバーライドされます。C++でnewを使用してループ内で一意のオブジェクトポインタを作成

このコードのために、テキストファイルからの入力に応じて特定の数のノードをインスタンス化する必要があるため、ループを使用する必要があります。

DoublyLinkedList<Student> dlist; 

for(int j = 0; j<numOfStudents;j++) 
{ 
    getline(myfile,line); 
    Student student1 = Student(toInt(line));  //toInt() converts string to Int 
    Node<Student> node1 = Node<Student> (student1); 
    dlist.add(&node1); 
} 

私が持っている問題は、テキストファイルに学生用の次のパラメータがある場合です。

そして二重リンクリストは、単に、パラメータとして '9' を有する同じ学生オブジェクトの3つの事例で満たされます。

問題を調べると、新しい演算子を使用すると、メモリリークを防ぐために後で削除する限り、各オブジェクトに一意のポインタが提供されることがわかりました。しかし、ノードの前に新しいを追加することによって、それを実装しようとする中で、私は

があるというエラー に「ノード*」からノー実行可能な変換を受けています「ノード」

私は非常に感謝問題の洞察や正しい方向へのプッシュ

+1

'ノード *ノード1 =新しいノード(STUDENT1)。 dlist.add(node1); 'node1のタイプを変更してみてください。 – lobo

+0

あなたのコードは、そのループの中ではかなり「コッシャー」なものではありません。割り当てを持つ別のオブジェクトに割り当てられる一時的なオブジェクトを作成しています。これは、JavaやC#のように見えます(これはあなたの背景かもしれません)。コードをもっと表示すると、結果を説明するのに役立ちます。 – Cyb3rFly3r

+0

問題の内容を推測するのではなく、私たちが実際にあなたを助けることができるように、[完全で、最小限で、検証可能な例](http://stackoverflow.com/help/mcve)を提供してください。私が提供したコードには動的割り当てはありません。 –

答えて

1
for(int j = 0; j<numOfStudents;j++) 
{ 
    getline(myfile,line); 
    Student student1 = Student(toInt(line));  //toInt() converts string to Int 
    Node<Student> node1 = Node<Student> (student1); 
    dlist.add(&node1); 

}

ここでは2つの問題を持っています。

まず、student1とnode1は、ループを実行するスコープしか持っていません。つまり、ループが終了すると、リストのデータは無効になります。 student1のデータがnode1の構成にコピーされて、student1がループ内のスコープのみが不自然になることがありますが、node1は間違いなく問題になる可能性があります。

第2に、node1へのポインタをリストnumOfStudents回に追加します。

一つの解決策は何ここで覚えておくことが重要であることは、あなたが、あなたは彼らと一緒に行われたとき、彼らは解放されなければならないリストから要素を削除する場合ということです、あなたの「ノード」

for(int j = 0; j<numOfStudents;j++) 
{ 
    getline(myfile,line); 
    Student student1 = Student(toInt(line));  //toInt() converts string to Int 
    // Create a new node to add to the list 
    Node<Student> *node1 = new Node<Student> (student1); 

    // Add the node to the list 
    dlist.add(node1); 
} 

のためのメモリを割り当てる必要。

delete <pointer to allocated node> 
関連する問題