Ошибка: передача константной строки {aka const std :: __ cxx11 :: basic_string & lt; char & gt;} ‘в качестве аргумента «this»

У меня есть следующий код для работы с двойниками:

static bool
double_param(const char ** p, double * ptr_val)
{
char *end;
errno = 0;
double v = strtod(*p, &end);
if (*p == end || errno) return false;
*p = end;
*ptr_val = v;
return true;
}

Этот код используется для проверки, является ли переданный двойной параметр недопустимым, например:

if (!double_param(&p, &b1)) //p is pointer and b1 is parameter.
//throw error;

И мне нужно написать эквивалентный код для работы со строкой длиной 3 символа. Я получил это самостоятельно:

static bool
string_param(const char ** p, const string * ptr_val)
{
char *end;
errno = 0;
int v = strtol(*p, &end, 10);
if (*p == end || errno) return false;
*p = end;
*ptr_val = v;
return true;
}

но я получаю следующую ошибку компиляции:

error: passing ‘const string {aka const std::__cxx11::basic_string<char>}’ as ‘this’ argument discards qualifiers [-fpermissive]
(*ptr_val) = v;
^

Любые предложения приветствуются, чтобы обойти эту ошибку. Также, пожалуйста, укажите на ошибку в моем коде и объясните немного, чтобы я мог лучше понять и учиться. Заранее спасибо.

1

Решение

*ptr_val это указатель на const string, Вы пытаетесь изменить значение const stringчто, конечно, вы не можете сделать.

Вместо этого вы можете сделать константный указатель так: string * const ptr_val

Это означает, что вы можете изменить значение данных, на которые указывает указатель, но вы не можете изменить то, на что указывает указатель.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector