2016-12-02 3 views
0

Ich versuche, separate Verkettung mit Array verknüpfter Liste zu implementieren. Zuerst habe ich struct array initialisiert, das aus 10 Kopfknoten besteht und anfänglich nichts, nicht 0, nichts ist im Knoten.Initialize Struct Array mit Null C++

dachte ich, das würde funktionieren:

void Hash::sepChain(int key){ 
    int i; 

    //initialize array with Null 
    myNode a[10]; 
    for(i=0; i<10; i++){ 
     a[i] = NULL; 
    } 

    myNode->item = key; 
    myNode->next = a[key%tableSize]; 
    a[key%tableSize] = myNode; 

} 

aber ich diese Störung erhalte.

hash.cpp:176:10: error: no viable overloaded '=' 
a[i] = NULL; 
~~~~^~~~~ 
./hash.hpp:30:8: note: candidate function (the implicit copy assignment operator) 
    not viable: no known conversion from 'long' to 'const myNode' for 1st 
    argument 
struct myNode{ 
^

das ist, wie ich struct in .hpp

struct myNode{ 
    int item;// the value that goes into the node 
    myNode *next; 
}; 

Warum bin ich immer diese Fehlermeldung geschrieben, und wie kann ich es beheben? Vielen Dank.

+0

Sieht so aus, als hätten Sie ein '*' verpasst. 'myNode a [10];' sollte "myNode * a [10]" sein, so wie es aussieht. – NathanOliver

+0

Ich verstehe nicht, warum fast jeder Anfänger versucht, eine verkettete Liste zu implementieren. Zuerst existiert 'std :: list', und zweitens sind verknüpfte Listen nicht so groß, es sei denn, Sie haben eine * sehr * große Menge an Daten und Sie müssen an beliebigen Stellen einfügen. –

+3

@GuillaumeRacicot Es ist ein typisches Hausaufgabenproblem für neue CS-Studenten. Sie müssen in der Lage sein, einen eigenen Container zu erstellen, bevor Sie den Standardcontainer verwenden können. – NathanOliver

Antwort

0

Sie können nicht auf NULL-Variable festlegen, die sich nicht auf Zeiger beziehen. Wenn Sie ein Element-inizialize wollen Sie es als

myNode *a[10] 
+0

Das wird nicht kompiliert. Bitte überarbeiten Sie, wie die Array-Pointer-Syntax funktioniert. –

+0

Sorry mein Fehler.Es war meine Ablenkung –

1
a[i] = NULL; 

erklären, müssen NULL ist nicht richtig, da die LHS dieser Operation ist ein Objekt vom Typ myNode. Es ist kein Zeiger auf myNode.

könnten Sie verwenden:

a[i] = myNode{}; 

Sie könnten auch verwenden:

myNode a[10] = {}; 

und werden die for Schleife befreien.

+0

Das gibt mir Fehler "Fehler: erwartet '(' für Funktion-Stil Cast oder Typ Konstruktion" – mike

+0

Sie brauchen C++ 11 für die '{}' Syntax, aka '-std = C++ 11 'für g ++ und clang. Wenn Sie C++ 11 nicht verwenden können, initialisieren Sie myNode stattdessen mit' myNode() '. – Asu