Ошибка, которую вы получаете из-за 2.2 / 2 в C ++ 03:
Если шестнадцатеричное значение для универсального имени символа меньше 0x20 или вдиапазон 0x7F-0x9F (включительно), или если универсальное имя символа обозначает символ в базовом исходном наборе символов, то программа имеет неправильную форму.
Таким образом, для строкового литерала необходимоиспользуйте взамен \x1
или \1
(и вы можете добавить ведущие нули по вкусу).В качестве альтернативы, если вы хотите, чтобы в вашей строке был только один символ:
string s;
s.push_back(1);
или:
string s(1,1);
В C ++ 11 (2.3 / 2) ограничение ослаблено:
, если шестнадцатеричное значение для универсального имени символа вне c-char-sequence, s-char-sequence или r-char-sequence символа или строкового литерала соответствуетк управляющему символу (в любом из диапазонов 0x00–0x1F или 0x7F – 0x9F, включительно) или к символу в базовом наборе исходных символов программа плохо сформирована.