Таким образом, в C++, const char * неявно конвертируется в std :: string, потому что std :: string имеет (неявный) конструктор, который принимает const char *. Так что компилятор пытается здесь создать временный объект станд :: строка для вызова функции, например, так:
Node.set_val(std::string("10h;"));
Однако, так как вы объявили параметр set_val быть неконстантная ссылка на станд :: string, компилятор не может выполнить эту операцию преобразования из-за того, что временные объекты не могут быть привязаны к неконстантным ссылкам.
Есть три способа сделать эту работу, в зависимости от того, что вы хотите достичь:
void Node::set_val(const std::string& val) {}
void Node::set_val(std::string val) {}
void Node::set_val(std::string&& val) {}
Все будет компилировать (последняя требует C++ 11 или выше), но, видя ваш случай использования, Я бы рекомендовал использовать второй или третий. Для объяснения, почему, попробуйте немного прочитать о семантике перемещения в C++ 11.
Важно, что const char * неявно преобразуется в std :: string, создавая временный объект, а временные объекты не могут передаваться в функции, принимающие неконстантные ссылки.
Ваш 'set_val' ожидает ссылки на параметр' std :: string' в качестве параметра. Но вы передаете только массив const из 5 символов. –
@MertMertce, который был просто для объяснения, я вызываю его через объект – Bharadwaj