boost :: lexical_cast з винятком string до char

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

string someString = boost::lexical_cast(sourceString);

Однак прискорення скаржиться на те, що вказаний вище код є:

[Виняток]: поганий лексичний акт: значення типу джерела не можна інтерпретувати як ціль

Джерело - це рядок, однак він завжди буде довжиною 1 символ.

Чи може хтось пояснити?

Дякую.

1
@set - вибачте, я неправильно написав цю частину, я мав намір оголосити її як символ. я міг це зробити, але я хотів би просто зрозуміти, чому прискорення не може перетворити його належним чином. Дякую
додано Автор czchlong, джерело
Або, можливо, char c = sourceString [0]; ?
додано Автор Mike Seymour, джерело
Також це не буде компілюватися, оскільки ви не можете перетворити результат char lexical_cast до рядка. Після того, як я це виправить, код працює , якщо sourceString містить один символ.
додано Автор Mike Seymour, джерело
Чи була причина, що ви робите це, а не щось подібне до char c = * (sourceString.c_str ()); ? І чому ви перетворюєте рядок на символ і повертаєте його в рядок?
додано Автор Seth Carnegie, джерело
@MikeSeymour або ви могли б просто зробити це ...
додано Автор Seth Carnegie, джерело
Що сказав @Mike; string не має конструктора з символом char . Ви, ймовірно, можете зробити рядок someString (boost :: lexical_cast (sourceString), 1); і зробити його роботою, але це дуже довгий шлях . Вам набагато краще робити char str = othertr [0] .
додано Автор Seth Carnegie, джерело

1 Відповіді

When I test it (after fixing the invalid conversion from char to string), the lexical cast succeeds as long as sourceString contains a single character. Here are the test results.

Якщо ваш справжній код не працює, то, будь ласка, розмістіть його більше; бажано програма, яка демонструє помилку.

4
додано
дякую за відповідь У мене є вектор , і я знаю, що рядок в положенні індексу х міг бути лише одним символом, тому, по суті, я роблю наступне: char someChar = lexical_cast (tokens [x]); це те, що кидає помилку. На жаль, слід було опублікувати це раніше. Дякую.
додано Автор czchlong, джерело
так, Майк, ви правильно, моє припущення було невірно. Дякую!
додано Автор czchlong, джерело
Можливо, ви повинні перевірити свої припущення; додати атрибут assert (tokens [x] .length() == 1); перед тим, як передати, щоб переконатися, що те, що ви знаєте, насправді, що відбувається.
додано Автор Mike Seymour, джерело
IT KPI C/С++ новым годом
IT KPI C/С++ новым годом
747 учасників

Чат обсуждения С/С++. - Вопросы "напишите за меня лабу" - это оффтоп. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/1147