'Неверное преобразование из some_type ** в const some_type **' - PullRequest
8 голосов
/ 20 апреля 2010

У меня есть функция, которая требует const some_type** в качестве аргумента (some_type - это структура, и функции нужен указатель на массив этого типа) Я объявил локальную переменную типа some_type* и инициализировал ее. Затем я вызываю функцию как f(&some_array), и компилятор (gcc) говорит:

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

В чем здесь проблема? Почему я не могу преобразовать переменную в const?

Ответы [ 3 ]

11 голосов
/ 20 апреля 2010
1 голос
/ 20 апреля 2010

У вас есть несколько вариантов, чтобы обойти то, что изложил Джеймсдлин в своем ответе.

Вы можете использовать промежуточную переменную.

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

Вы можете изменить параметры f.

void f(some_type const* const* some_array);
1 голос
/ 20 апреля 2010

Вам, вероятно, нужно указать какой-то дополнительный контекст, например, является ли аргумент передачей данных в или из (или обоих?) Функции?

Попробуйте также сделать вашу переменную const:

some_type const *some_array = ....;

Это читается как "some_array - указатель на const some_type". Код не может изменить указанную вещь. Поэтому вы должны объявить переменную const, прежде чем передать ее в функцию.

(ред ...)

...