Присваивание отбрасывает спецификатор const из целевого типа указателя - при попытке получить значение

Couchbase использует модель, основанную на событиях. Поэтому, чтобы получить значения, мне нужно настроить обработчик обратного вызова, а затем выдать запрос get в базу данных. Это делается так:

[... some stuff happens]
/* set up a callback for our get requests  */
lcb_set_get_callback(instance, get_callback);

в get_callback у меня есть cookie поставить свои ценности в. Поэтому я анализирую возвращаемый объект и помещаю его в файл cookie с помощью:

json_t *object;

[... some error handling and parsing]

/*Put the json_object into the cookie*/
lcb_set_cookie(instance, object);

Когда я хочу получить его, я должен использовать lcb_get_cookie Страница man, которая возвращает пустой указатель, но говорит: "lcb_get_cookie() возвращает значение, установленное с помощью lcb_set_cookie(), или NULL, если lcb_set_cookie () не устанавливает никакого значения". Поэтому я хочу сделать что-то вроде:

/* Retrieve the ad out of the cookie*/
ad_json = lcb_get_cookie(instance);

Когда я пытаюсь использовать его таким образом, я получаю предупреждение:warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default], Так что я в замешательстве. Как я могу получить значение, которое я положил в куки?

Изменить: я забыл упомянуть, что мне нужно для дальнейшей обработки данных и хочу внести в них изменения.

1 ответ

Решение

Скажите компилятору, что вы обещаете не менять этот cookie:

json_t const * object = lcb_get_cookie(instance);

Но если вам нужно изменить его, вы, возможно, можете привести его, потому что руководство говорит, что "...libcouchbase не будет ничего делать со значением".:

json_t * object = (json_t *)lcb_get_cookie(instance);

Но, возможно, более безопасной альтернативой будет копирование содержимого в новый файл cookie, внесение изменений и его установка заново?

Я не знаю точное расположение json_tЕсли он не содержит никаких внутренних указателей, простое назначение может помочь:

 json_t const * old = lcb_get_cookie(instance);
 json_t * new = /* init pointer with your new object */;
 *new = *old; /* Copy data */
Другие вопросы по тегам