boost ::lexical_cast из строки в исключение char

#c #boost #lexical-cast

#c #boost #лексическое приведение

Вопрос:

Я новичок в использовании boost ::lexical_cast и имею минимальное представление о его внутренностях. Я пытаюсь выполнить следующее приведение:

 string someString = boost::lexical_cast<char>(sourceString);
  

Однако boost жалуется, что приведенный выше код:

[Исключение]: неправильное лексическое приведение: значение исходного типа не может быть интерпретировано как целевое

Источником является строка, однако она всегда будет иметь длину всего 1 символ.

Не мог бы кто-нибудь объяснить?

Спасибо.

Комментарии:

1. Была ли причина, по которой вы делаете это вместо чего-то подобного char c = *(sourceString.c_str()); ? И почему вы превращаете строку в символ и возвращаете ее обратно в строку?

2. Или, может char c = sourceString[0]; быть?

3. @MikeSeymour или вы могли бы просто сделать это…

4. @set — извините, я неправильно написал эту часть, я хотел объявить ее как символ. я мог бы это сделать, но я просто хотел бы понять, почему boost не может преобразовать его должным образом. Спасибо

5. Кроме того, это не будет компилироваться, поскольку вы не можете преобразовать char результат lexical_cast<char> в строку. Как только я это исправлю, код будет работать до тех пор, пока sourceString содержит один символ.

Ответ №1:

Когда я его тестирую (после исправления недопустимого преобразования из char в string ), лексическое приведение выполняется успешно, если sourceString содержит один символ. Вот результаты теста.

Если ваш реальный код не работает, пожалуйста, опубликуйте его подробнее; предпочтительно запускаемую программу, которая демонстрирует ошибку.

Комментарии:

1. спасибо за ответ. У меня есть вектор<string>, и я знаю, что строка с индексом позиции x будет состоять только из одного символа, поэтому, по сути, я делаю следующее: char someChar = lexical_cast<char>(токены [x]); это то, что выдает ошибку. Извините, я должен был опубликовать это раньше. Спасибо.

2. Возможно, вам следует проверить свои предположения; добавьте assert(tokens[x].length() == 1); перед приведением, чтобы убедиться, что то, что вы знаете, на самом деле происходит.

3. да, Майк, ты прав, мое предположение было неверным. Спасибо!