为什么这被认为是不变的?

时间:2018-05-17 01:45:21

标签: c++ utf-8

我有一堆UTF8字符:

stack<wchar_t> tokenStack;

我尝试像这样添加:

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

但是编译器不喜欢它:

$ g ++ PropositionalLogic.cpp -o PropositionalLogic

  

PropositionalLogic.cpp:27:39:错误:对'const value_type'类型的引用         (又名'const wchar_t')无法绑定到'const wchar_t [2]'类型的左值   void doLeftParen(){tokenStack.push(L“(”)}

我尝试搜索错误,但是空了。我不确定我还应该寻找什么。我也试过添加一个常规的ASCII字符,但同样的错误。如何在此堆栈中添加字符?

2 个答案:

答案 0 :(得分:4)

你试图将字符串推入而不是字符串,将双引号更改为单引号会使其正常工作,而且在推送函数结束时缺少分号

void doLeftParen() { tokenStack.push( L'(' ); }

答案 1 :(得分:3)

你几乎是对的:

来自lex.ccon

  

以字母L开头的字符文字,例如L'z',   是一个宽字符字面值。

前缀为L的字符 UTF8字符文字

代码中的编译错误L"("(带双引号)是多记录字面,但代码期望它是宽字符文字的堆栈< / em>的第

将其更改为单引号:

L'(' // now a wide-char literal