2016-04-28 3 views
0

Der Fehler konfrontiert mich mit dem Compiler sagen cannot convert ‘double*’ to ‘double’ in assignment. Mein Code ist unten.Typ Mismatchs

double* initArray(int data[], int dimensionCount){ 
    //data: element 0= number of dimensions 
    //element 1 through inf define the size of each dimension 
    //dimensionCount keeps track of the current dimension being manipulated by the function 


    //Allocate dynamic memory for the current dimension 
    double* output; 
    output=new double[data[dimensionCount]]; 

    int i=dimensionCount; 

    while(i<data[dimensionCount]){ 
     if(!(output[i]= initArray(data, dimensionCount++))){ 
      std::cout<< "Error! Out of Memory!"; 
      break; 
     } 

    i++; 
    } 
//returning the generated array tacks on the generated dimension to the lower dimension preceding it 
return output; 
} 

Als output vom Typ double* und arrayInit kehrt Variablen vom Typ double*, ich weiß nicht, wo es versucht, von einem double zu einem double* zu konvertieren. Ich fand this, aber es scheint nicht zu gelten, wie data wird korrekt übergeben, und intArray gibt einen Zeiger auf das Array, das generiert wird, nicht das Array selbst zurück, so sollte es keinen Typ nicht übereinstimmen mit output sein.

+0

'data []' ist höchstwahrscheinlich nicht das, was Sie denken, es ist wahrscheinlich nur "Daten" in diesem Kontext. Beachten Sie, dass 'initArray (int data [] ...' äquivalent zu 'initArray (int * data ...' Dies ist jedoch eher C-ish C++. Sie sollten auf jeden Fall besseres Lernmaterial bekommen. Bemerkung: Wenn Sie es tun Aus irgendeinem Grund, aber akademische Neugier, was Sie brauchen, ist wahrscheinlich bereits implementiert und bereit zu verwenden. –

+0

Um zu betonen, 'new []' ist * wirklich * selten in der realen Welt nützlich, 'std :: vector' macht alles tut es und mehr und besser. –

+0

Ich mache es nur, um es zu versuchen und herauszufinden.: Ich versuche auch, eine Bibliothek zu erstellen, ohne etwas anderes als 'iostream' und' string' zu verwenden. Wenn ich genauer hinsehe, wäre das nicht ein Array-Element, das ich referenzieren möchte, ohne dass ein Schlüssel dem Array mitteilt, auf welche Zelle ich referenziere? Ich werde versuchen, das in 'data' zu ändern und zu sehen, wie das funktioniert. Danke! – Graf

Antwort

1

ich mit der Funktion spielte mehr und erkennen, dass obwohl output ein double* ist und nicht in Konflikt mit dem, was von initArray zurückgegeben wird, output[i] nur ein regelmäßiges double ist, wie es ist, was output zu zeigt. Die Typabweichung ergab sich aus dem Versuch, output[i] auf double* zu setzen.

das Problem zu lösen, ich die Funktion modifiziert, um eine double anstelle eines double* zurückzukehren, und dann sorgte dafür, dass output in eine neue Variable array dereferenziert wurde. Dies ermöglichte, dass ein normales Array von der Funktion zurückgegeben wurde, was die Typabweichung verhinderte und auch das tatsächliche Ergebnis der Funktion viel nützlicher machte. Hier

ist der Code:

double initArray(int data[], int dimensionCount){ 
//data: element 0= number of dimensions 
//element 1 through inf define the size of each dimension 
//dimensionCount keeps track of the current dimension being manipulated by the function 


//Allocate dynamic memory for the current dimension 
double* output; 
output=new double[data[dimensionCount]]; 

int i=dimensionCount; 

while(i<data[dimensionCount]){ 
    if(!(output[i]= initArray(data, dimensionCount++))){ 
     std::cout<< "Error! Out of Memory!"; 
     break; 
    } 

    i++; 
} 
//returning the generated array tacks on the generated dimension to the lower dimension preceding it 
double array=*output; 
return array; 
} 
+0

Diese Funktion gibt kein Array zurück, es gibt ein 'double' zurück - und außerdem ein double, das noch nicht auf einen bestimmten Wert initialisiert wurde. Soweit ich sehen kann, führt diese Funktion nichts aus, außer Speicher zu verlieren und Müll zurückzugeben. Und das setzt voraus, dass es nicht in unendlicher Rekursion stecken bleibt und, naja, überfließe deinen Stack! – Entropy

+0

Ich dachte, Arrays waren kein Typ. Ein 'double' kann ein Array mit Werten vom Typ' double' speichern. Ich habe angefangen, an anderen Teilen meiner Bibliothek zu arbeiten und dieses Problem zu debuggen, wenn ich es eine Zeit lang nicht durcheinander gebracht habe (in der Hoffnung, dass ich neue Einsichten über das Problem oder was auch immer bekomme). In der Theorie erzeugt diese Funktion ein Array von N-Dimension. Der 'output'-Zeiger zeigt auf ein Array, und jede Schleife fügt eine Dimension hinzu ... oder das ist, was ich beabsichtigt habe. Das tut es nicht, da es noch nicht getan ist. : P – Graf

+0

Es ist auch nicht beabsichtigt, einen Wert zu erzeugen. Ich ziele darauf ab, ein Skelett eines Arrays zu bekommen, für das ich N-dimensionale Koordinaten oder Vektoren speichern kann, damit ich !! MATH !! – Graf

0

einfach

return *output; 

würde den Trick tun. Gibt es einen bestimmten Grund für die Verwendung einer anderen Variablen?

+0

Ich dachte, es wäre klarer. Ich lerne immer noch, und '* output 'klickt nicht sofort in meinen Kopf, während' array = * output 'mich daran erinnert, dass' * output '' Ausgabe 'dereferenziert. – Graf