2010-04-20 9 views
8

Mam funkcję, która wymaga const some_type** jako argumentu (some_type jest strukturą, a funkcja potrzebuje wskaźnika do tablicy tego typu). Deklarowałem zmienną lokalną typu some_type* i zainicjowałem ją. Potem wywołać funkcję jako f(&some_array) i kompilator (gcc) mówi:"Nieprawidłowa konwersja z some_type ** na const some_type ** '

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

Jaki jest problem? Dlaczego nie mogę przekonwertować zmiennej na const?

Odpowiedz

1

Prawdopodobnie trzeba podać trochę więcej kontekstu, na przykład czy argument przekazał dane do lub z (lub obu?) Funkcji?

Spróbuj dokonywania zmiennej const także:

some_type const *some_array = ....; 

To brzmi jak "some_array jest wskaźnik do const some_type". Kod nie może modyfikować wskazanej rzeczy. Musisz więc zadeklarować swoją zmienną stałą przed przekazaniem jej do funkcji.

(Zmieniano ...)

+1

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

+0

Huh. Zostało to zaznaczone jako zaakceptowana odpowiedź, mimo że w ogóle nie odnosi się do pytania "dlaczego"? = ( – jamesdlin

1

masz kilka opcji, aby ominąć co jamesdlin przedstawił w swojej odpowiedzi.

Można użyć zmiennej pośredniej.

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

Można zmienić parametry f.

void f(some_type const* const* some_array);