Почему это считается постоянным? - PullRequest
0 голосов
/ 17 мая 2018

У меня есть стек символов UTF8:

stack<wchar_t> tokenStack;

я пытаюсь добавить к этому так:

void doLeftParen() { tokenStack.push( L"(" ) }

но компилятору это не нравится:

$ g ++ PropositionalLogic.cpp -o PropositionalLogic

PropositionalLogic.cpp: 27: 39: ошибка: ссылка на тип 'const value_type' (aka 'const wchar_t') не может привязаться к l-значению типа 'const wchar_t [2]' void doLeftParen () {tokenStack.push (L "(")}

Я попытался найти ошибку, но ничего не вышло. Я не совсем уверен, что еще я должен искать. Я также попытался просто добавить обычный символ ASCII, но та же ошибка. Как я могу добавить символы в этот стек?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Вы почти правы:

С lex.ccon

Символьный литерал, который начинается с буквы L, например L'z', широкий символ литерал.

Символы с префиксом L это не a Литерал UTF8 .

Ошибка компиляции в вашем коде: L"(" (с двойными кавычками) является литералом из нескольких символов , но код ожидает, что это будет стек литерала широких символов s.

Измените его на одинарные кавычки:

L'(' // now a wide-char literal
0 голосов
/ 17 мая 2018

Вы пытаетесь выдвинуть строку, а не символ, изменение двойных кавычек на одинарные кавычки заставит его работать, также вы пропустите точку с запятой в конце функции push

void doLeftParen() { tokenStack.push( L'(' ); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...