У меня есть следующий код для работы с двойниками:
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;
^
Любые предложения приветствуются, чтобы обойти эту ошибку. Также, пожалуйста, укажите на ошибку в моем коде и объясните немного, чтобы я мог лучше понять и учиться. Заранее спасибо.
*ptr_val
это указатель на const string
, Вы пытаетесь изменить значение const string
что, конечно, вы не можете сделать.
Вместо этого вы можете сделать константный указатель так: string * const ptr_val
Это означает, что вы можете изменить значение данных, на которые указывает указатель, но вы не можете изменить то, на что указывает указатель.
Других решений пока нет …