Kann nicht konvertieren (*) [] in **

8

Wenn ich eine Datei erstelle:

test.cpp:

%Vor%

Und dann: g ++ test.cpp -o test

Ich bekomme

%Vor%

Warum kann ich das nicht tun?

Ist double var [4] [2] nicht dasselbe wie double ** var und dann den Speicher zuzuweisen?

    
Ezequiel 23.12.2008, 23:34
quelle

2 Antworten

17

C ++ - Zeichenfolgen: [] vs. *

Sehen Sie sich die Exkursion: Multidimensionale Arrays an, in der beschrieben wird, wie Sie multidimensionale Arrays als Argumente an Funktionen übergeben. Grundsätzlich möchten Sie Ihren Code in diesen ändern:

%Vor%

Alle bis auf die letzten Dimensionen müssen der aufgerufenen Funktion bekannt sein. Andernfalls würde der Compiler nicht in der Lage sein, den korrekten Abstand zu Werten in Ihrem Array zu berechnen (a [1] ist sizeof(double[2]) bytes entfernt von [0]).

Sie scheinen in der Lage zu sein, das Array zu akzeptieren, ohne die Größe der Dimensionen zu kennen. Sie können dafür Vorlagen verwenden:

%Vor%

Der Compiler erstellt eine Kopie (instanziieren) dieser Vorlage für jeden Wert von N, der mit der Funktion verwendet wird, wobei automatisch die richtige N abgeleitet wird.

    
Johannes Schaub - litb 23.12.2008 23:46
quelle
-1

Das Problem ist, dass ein double ** ein Zeiger auf einen Zeiger ist. Ihre 'f' Funktion möchte die Adresse eines Zeigers an ein Double übergeben werden. Wenn Sie f (var) aufrufen, nun, wo genau denken Sie, dass der Zeiger ist? Es existiert nicht.

Das wird funktionieren:

%Vor%

Es würde auch funktionieren, die Definition von f zu ändern:

%Vor%

Nun nimmt f einen Zeiger auf die Art von Array, die Sie haben. Das wird funktionieren.

    
Larry Gritz 24.12.2008 01:41
quelle

Tags und Links