C++ 为什么这被认为是常数?
我有一堆UTF8字符:C++ 为什么这被认为是常数?,c++,utf-8,C++,Utf 8,我有一堆UTF8字符: stack<wchar_t> tokenStack; 但是编译器不喜欢它: $g++PropositionalLogic.cpp-o PropositionalLogic PropositionalLogic.cpp:27:39:错误:引用类型“const value\u type” (也称为'const wchar__t')无法绑定到'const wchar__t[2]类型的左值 void doleftpren(){tokenStack.push(L“(”
stack<wchar_t> tokenStack;
但是编译器不喜欢它:
$g++PropositionalLogic.cpp-o PropositionalLogic
PropositionalLogic.cpp:27:39:错误:引用类型“const value\u type”
(也称为'const wchar__t')无法绑定到'const wchar__t[2]类型的左值
void doleftpren(){tokenStack.push(L“(”)}
我尝试搜索错误,但结果是空的。我不确定还应该搜索什么。我也尝试了只添加常规ASCII字符,但出现了相同的错误。如何将字符添加到此堆栈?您尝试推送字符串而不是字符,将双引号更改为单引号将使其正常工作,并且push函数末尾缺少分号
void doLeftParen() { tokenStack.push( L'(' ); }
你几乎是对的:
从
以字母L
开头的字符文字,例如L'z'
,
是宽字符文字
前缀为L
的字符是非UTF8字符文本
代码中的编译错误是L”(“
(w/双引号))是多字符文字,但代码希望它是宽字符文字的堆栈
将其更改为单引号:
L'(' // now a wide-char literal
您缺少一个分号问题不在于它是常量,而在于
L”(“
是由两个字符组成的数组,而不是单个字符。L”(“
(单引号))可能是您想要使用的。请注意,这不是utf8,但可能是UTF16我认为您指的是“Unicode字符”-UTF-8是一种传输编码,通常通过char*
访问。
L'(' // now a wide-char literal