为什么这被认为是常数?

3

我有一堆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字符,但是出现了同样的错误。如何向此堆栈添加字符?


1
你漏掉了一个分号。 - Sid S
2
问题不在于它是常量,而在于 L"(" 是一个由两个字符组成的数组,而不是单个字符。你可能想使用 L'('(单引号)。 - zneak
请注意,这不是utf8编码,而是可能是utf16编码。 - Guillaume Racicot
我认为您指的是“Unicode字符” - UTF-8是一种传输编码,通常通过char *访问。 - Toby Speight
2个回答

4

您正在尝试推送一个字符串而不是一个字符,将双引号改为单引号将使其正常工作,同时您在push函数末尾缺少了一个分号。

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

3
你几乎是正确的:
lex.ccon 中可以看到,以字母 L 开头的字符字面值,例如 L'z',是宽字符字面值。
带有前缀 L 的字符不是 UTF8 字符字面值。
你代码中的编译错误是因为 L"("(带双引号)是多字符字面值,但代码期望它是一堆宽字符字面值。
将其改为单引号:
L'(' // now a wide-char literal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接