2010-04-20 5 views
8

Ich habe eine Funktion, die const some_type** als Argument benötigt (some_type ist eine Struktur, und die Funktion benötigt einen Zeiger auf ein Array dieses Typs). Ich habe eine lokale Variable vom Typ some_type* deklariert und initialisiert. Dann rufe ich die Funktion als f(&some_array), und die Compiler (gcc) sagt:'Ungültige Konvertierung von some_type ** in const some_type **'

error: invalid conversion from ‘some_type**’ to ‘const some_type**’ 

Was ist hier das Problem? Warum kann ich eine Variable nicht in const konvertieren?

Antwort

1

Sie müssen wahrscheinlich einige weitere Kontext angeben, zum Beispiel ist das Argument Daten in oder aus (oder beiden?) Die Funktion übergeben?

Versuchen Sie Ihre Variable const als auch machen:

some_type const *some_array = ....; 

Dieses liest als "some_array ein Zeiger auf ein konstantes some_type ist". Der Code kann das Ding, auf das gezeigt wird, nicht ändern. Also müssen Sie Ihre Variable const deklarieren, bevor Sie sie an die Funktion übergeben.

(Edited ...)

+1

"Nein" :) (http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.17) – Constantin

+0

Huh. Dies wurde als die akzeptierte Antwort markiert, obwohl sie die Frage nach dem "Warum" überhaupt nicht behandelt. = ( – jamesdlin

1

Sie haben ein paar Optionen um zu bekommen, was in seiner Antwort skizzierte jamesdlin.

Sie könnten eine Zwischenvariable verwenden.

some_type const* const_some_array = some_array; 
f(&const_some_array); 

Sie könnten die Parameter von f ändern.

void f(some_type const* const* some_array); 
Verwandte Themen