#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. да, Майк, ты прав, мое предположение было неверным. Спасибо!